生物分子gene
输入:
3
A+00A+A+ 00B+D+A- B-C+00C+
输出:
bounded
说明一下100%的题解
假设一个单位为0000A+B-
那么显然这个方块可以连接B+和A-
那么建图就是A+~B+,B-~A-
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 using namespace std; 7 char str[10001]; 8 int map[54][54],d[54],cnt; 9 queue<int>Q; 10 int n; 11 int num(char x,char y) 12 { 13 if (x=='0') return 52; 14 if (y=='+') 15 return ((int)x-'A'); 16 else return ((int)x-'A'+26); 17 } 18 int main() 19 {int i,j,k; 20 cin>>n; 21 for (i=1;i<=n;i++) 22 { 23 scanf("%s",str+1); 24 for (j=1;j<=4;j++) 25 { 26 for (k=1;k<=4;k++) 27 { 28 if (j==k) continue; 29 int x=num(str[2*j-1],str[2*j]); 30 int y=num(str[2*k-1],str[2*k]); 31 if (x==52||y==52) continue; 32 if (y>=26) y-=26; 33 else y+=26; 34 map[x][y]=1; 35 } 36 } 37 } 38 for (i=0;i<52;i++) 39 for (j=0;j<52;j++) 40 if (map[i][j]) d[j]++; 41 for (i=0;i<52;i++) 42 if (d[i]==0) cnt++,Q.push(i); 43 while (Q.empty()==0) 44 { 45 int u=Q.front(); 46 Q.pop(); 47 for (i=0;i<52;i++) 48 if (map[u][i]) 49 { 50 d[i]--; 51 if (d[i]==0) 52 { 53 cnt++; 54 Q.push(i); 55 } 56 } 57 } 58 if (cnt==52) 59 { 60 cout<<"bounded\n"; 61 } 62 else 63 { 64 cout<<"unbounded\n"; 65 } 66 }