• [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
      %d-->%d
    ",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
  • 相关阅读:
    利用border制作三角形原理
    JavaScript中null和undefined
    localStorage 如何存储JSON数据并读取JSON数据
    常见的几种浏览器内核简单介绍
    关于Banner设计的促销氛围
    分数分配
    餐饮管理系统
    餐馆管理之点菜
    餐饮管理之结账
    餐饮管理之菜品管理
  • 原文地址:https://www.cnblogs.com/czllgzmzl/p/5644881.html
Copyright © 2020-2023  润新知