标签:存在 一个 src i++ size pos data isp 原因
1 #include<cstdio> 2 #include<cstring> 3 #define mem(a,p) memset(a,p,sizeof(a)) 4 const int N=2010; 5 int m,n,tot=0,first[N]; 6 struct node{int ne,to;}e[N*4]; 7 bool ok[N]; 8 char ans[N]; 9 void add(int u,int v){e[++tot]=(node){first[u],v};first[u]=tot;} 10 void dfs(int x){ 11 ok[x]=1; 12 for(int i=first[x];i;i=e[i].ne) 13 if(!ok[e[i].to])dfs(e[i].to); 14 } 15 bool check(int x){ 16 mem(ok,0); 17 dfs(x); 18 for(int i=1;i<=n;i++) 19 if(ok[2*i]&&ok[2*i+1])return 0; 20 return 1; 21 } 22 int main(){ 23 scanf("%d %d",&n,&m); 24 for(int i=1,a,b;i<=m;i++){ 25 char ch[5],cc[5]; 26 scanf("%d %s %d %s",&a,ch+1,&b,cc+1); 27 if(ch[1]==‘Y‘){ 28 if(cc[1]==‘Y‘)add(a*2+1,b*2),add(b*2+1,a*2); 29 else add(b*2,a*2),add(a*2+1,b*2+1); 30 } 31 else{ 32 if(cc[1]==‘Y‘)add(a*2,b*2),add(b*2+1,a*2+1); 33 else add(a*2,b*2+1),add(b*2,a*2+1); 34 } 35 } 36 for(int i=1;i<=n;i++){ 37 int p=check(2*i),d=check(2*i+1); 38 if(!p&&!d)return printf("IMPOSSIBLE"),0; 39 if(p&&d)ans[i]=‘?‘; 40 else if(p)ans[i]=‘Y‘; 41 else ans[i]=‘N‘; 42 } 43 for(int i=1;i<=n;i++)printf("%c",ans[i]); 44 return 0; 45 } 46
【bzoj2199/Usaco2011 Jan】奶牛议会——2-sat
标签:存在 一个 src i++ size pos data isp 原因
原文地址:http://www.cnblogs.com/JKAI/p/7697632.html