标签:
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const char ch[3]={‘Y‘,‘N‘,‘?‘}; 5 const int N=10000; 6 struct ee{int to,next;}e[N]; 7 int opt[N],n,m,head[N],cnt; 8 bool vis[N]; 9 void dfs(int x){ 10 vis[x]=1; 11 for (int l=head[x];l;l=e[l].next){ 12 int v=e[l].to; 13 if (!vis[v]) dfs(v); 14 } 15 } 16 17 void insert(int u,int v){ 18 e[++cnt].to=v; e[cnt].next=head[u];head[u]=cnt; 19 } 20 21 bool check(int x,int pd){ 22 memset(vis,0,sizeof(vis)); 23 dfs(2*x-pd); 24 for (int i=1;i<=n;i++) 25 if (vis[i*2]&&vis[i*2-1]) return 0; 26 return 1; 27 } 28 29 int main(){ 30 scanf("%d%d",&n,&m); 31 char ch1[2],ch2[2]; 32 for (int i=1;i<=m;i++){ 33 int x,y,xp,yp; 34 scanf("%d%s%d %s",&x,ch1,&y,ch2); 35 if (ch1[0]==‘N‘)x=x*2;else x=x*2-1; 36 if (ch2[0]==‘N‘)y=y*2;else y=y*2-1; 37 if (x%2==0)xp=x-1;else xp=x+1; 38 if (y%2==0) yp=y-1;else yp=y+1; 39 insert(yp,x);insert(xp,y); 40 } 41 for (int i=1;i<=n;i++){ 42 int q=check(i,0),p=check(i,1);//0代表不通过,1代表通过 43 if (!p&&!q) {printf("IMPOSSIBLE\n");return 0;} 44 if (p&&q)opt[i]=2; 45 if (p&&!q)opt[i]=0; 46 if (q&!p)opt[i]=1; 47 } 48 for (int i=1;i<=n;i++) printf("%c",ch[opt[i]]); 49 }
【BZOJ2199】 [Usaco2011 Jan]奶牛议会
标签:
原文地址:http://www.cnblogs.com/wuminyan/p/5140580.html