查看: 1966|回復: 2

[逾期] b017 - B.家長會問題

[複製鏈接]

該用戶從未簽到

10

主題

32

帖子

163

積分

高一新生

Rank: 2

積分
163

台南一中資訊社新手達陣

發表於 2014-4-28 07:51:44 | 顯示全部樓層 |閱讀模式

趕快加入我們來參與討論吧!

您需要 登錄 才可以下載或查看,沒有帳號?加入我們

x
題目:http://judge.tnfsh.tn.edu.tw:8080/ShowProblem?problemid=b017

我是用2-SAT做 可是NA 18/27了
覺得可能是字典序的問題 可是我不知道要怎麼改
有人可以幫忙看一下問題在哪裡嗎?m(_ _)m


http://ideone.com/VdWqVn
/**********************************************************************************/  
/*  Problem: b017 "B.家長會問題" from 2007 校內初選                               */  
/*  Language: C++                                                                 */  
/*  Result: NA (18 / 27) on ZeroJudge                                             */  
/*  Author: ForTest at 2014-03-25 13:46:24                                        */  
/**********************************************************************************/  
  
#include <iostream>  
#include <cstdio>  
#include <cstring>  
#include <vector>  
#include <algorithm>  
#include <map>  
#include <queue>  
#include <sstream>  
  
using namespace std;  
  
#define F(a,b) for(int a=0;a<b;++a)  
typedef long long LL;  
  
const int mv=1000;int cv;  
int n,m;  
int v[mv],scc[mv];  
vector<int>e[mv],be[mv],topo,ans;  
  
int Not(int a){return -a;}  
void Add(int a,int b){  
    e[a].push_back(b);  
    be[b].push_back(a);  
}  
  
void Dfs(vector<int> *E,int x,int tag = -1){  
    if(v[x])return;  
    v[x] = 1;   scc[x] = tag;  
    F(i,E[x].size())  
        Dfs(E, E[x][i], tag);  
    if(E == e)  
        topo.push_back(x);  
}  
void Kos(){  
    memset(v,0,sizeof v);  
    for(int i=n+1;i<cv;++i) Dfs(e,i);  
    for(int i=0;i<n;++i) Dfs(e,i);  
    memset(v,0,sizeof v);  
    int cnt = 0;  
    for(int i=topo.size()-1;i>=0;--i)  
        Dfs(be,topo[i],cnt++);  
}  
  
bool Output(){  
    for(int i=1+n;i<cv;++i) if(scc[i] == scc[n*2-i]){  
        puts("0"); return 0;}  
    printf("%d\n",n);  
    for(int i=1+n;i<cv;++i)  
        printf( (scc[i] > scc[n*2-i]) ?  
                "+" : "-");  
    puts("");  
    return 1;  
}  
  
int main(){  
    scanf("%d%d",&n,&m);  
    cv = n*2 + 1;  
    F(i,m){  
        int a,b;  
        scanf("%d%d",&a,&b);  
        Add(Not(a)+n,b+n);  
        Add(Not(b)+n,a+n);  
    }  
    Kos();  
    Output();  
    return 0;  
}  


點評

.對於發問中問題,若有人回復您的問題,須於7日內樓主須回復該回答對您的幫助,若解決你的問題,需把屬性框改成解決,違者將扣樓主積分5分並...  發表於 2014-5-12 23:02

評分

參與人數 1金幣 -5 收起 理由
Sylveon -5 違反版規

查看全部評分

回復

使用道具 檢舉

  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    發表於 2014-4-28 13:04:49 | 顯示全部樓層
    因為第二筆測資消失了
    回復 支持 反對

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表