[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 }
View Code

 

以上是关于[bzoj3953] [WF2013]Self-Assembly的主要内容,如果未能解决你的问题,请参考以下文章

bzoj3969 [WF2013]Low Power

[bzoj3955] [WF2013]Surely You Congest

BZOJ3971 [WF2013]Матрёшка

BZOJ 4078: [Wf2014]Metal Processing Plant

BZOJ3963[WF2011]MachineWorks cdq分治+斜率优化

bzoj3963[WF2011]MachineWorks cdq分治+斜率优化dp