[bzoj3953] [WF2013]Self-Assembly
Posted czllgzmzl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj3953] [WF2013]Self-Assembly相关的知识,希望对你有一定的参考价值。
将正方形视为连接字符间的边。比方说正方形上存在A+,B-,就从A-往B+连边,表示字符可以通过这个正方形进行变换。
如果能构成环的话就可以无穷大了。。。判环随便写个拓扑什么的...
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #define ll long long 6 #define ull unsigned long long 7 #define d double 8 using namespace std; 9 bool mp[55][55]; 10 int dl[233],rd[233];; 11 int i,j,k,n,m,l,r; 12 char s[23]; 13 14 int ra,fh;char rx; 15 inline int read(){ 16 rx=getchar(),ra=0,fh=1; 17 while((rx<\'0\'||rx>\'9\')&&rx!=\'-\')rx=getchar(); 18 if(rx==\'-\')fh=-1,rx=getchar(); 19 while(rx>=\'0\'&&rx<=\'9\')ra*=10,ra+=rx-48,rx=getchar();return ra*fh; 20 } 21 int main(){ 22 n=read();int a[5]; 23 for(i=1;i<=n;i++){ 24 scanf("%s",s+1); 25 for(j=1;j<=4;j++)if(s[j<<1]!=\'0\') 26 a[j]=(s[j*2-1]-\'A\'+1)*2+(s[j<<1]==\'-\');else a[j]=-233; 27 // for(j=1;j<=4;j++)printf(" %d",a[j]);puts(""); 28 for(j=1;j<4;j++)if(a[j]>0)for(k=j+1;k<=4;k++)if(a[k]>0) 29 // printf(" %d-->%d\\n %d-->%d\\n",a[j]^1,a[k],a[k]^1,a[j]), 30 mp[a[j]^1][a[k]]=mp[a[k]^1][a[j]]=1; 31 // printf("(%d)",i); 32 } 33 for(i=2;i<=53;i++){ 34 for(j=2;j<=53;j++)if(mp[j][i])rd[i]++; 35 if(!rd[i])dl[++r]=i; 36 } 37 while(l<r) 38 for(int now=dl[++l],i=2;i<=53;i++)if(mp[now][i]&&!--rd[i]) 39 dl[++r]=i; 40 if(r==52)puts("bounded");else puts("unbounded"); 41 }
以上是关于[bzoj3953] [WF2013]Self-Assembly的主要内容,如果未能解决你的问题,请参考以下文章
[bzoj3955] [WF2013]Surely You Congest
BZOJ 4078: [Wf2014]Metal Processing Plant