ACM/ICPC World Finals 2013 A Self-Assembly
来源:互联网 发布:网管软件限制 编辑:程序博客网 时间:2024/04/25 23:56
题目大意
给定一些分子,给定这些分子的四个方向(上下左右)的样式,只有相同样式的对应接口才能结合,问你用这些分子是否可以构成一个无穷大的结构体。
解法
实际上这道题就是找是否有环就可以了,如果有环,那么就一定可以无限延续下去。所以我们先建立A+~Z-这些点,然后我们建立每个分子的每条边所对应的点到另一条不同的边的对立的点的边。举个例子:
00B+D+A-
这个分子,我们要建一下的边:
B+ -> D-
B+ -> A+
D+ -> B-
D+ -> A+
A- -> B-
A- -> D-
然后就是个topo找环了。
附上AC代码:
#include <cstdio>#include <cstdlib>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int MAXM = 160500;const int MAXN = 50000;class Edge{ public: int to; int next;};Edge es[MAXM];int head[MAXN];int ent[MAXN];int N, n;char str[10];int et = -1;void addEdge(int u, int v){ et++; es[et].to = v; es[et].next = head[u]; head[u] = et;}void readin(){ memset(head, -1, sizeof(head)); scanf("%d", &n); N = n+30; int tmp; for (int i = 1; i <= n; i++) { scanf("%s", str); if (str[1] == '+') { tmp = str[0]-'A'+1; addEdge(i, tmp+n); ent[tmp+n]++; } else if (str[1] == '-') { tmp = str[0]-'A'+1; addEdge(tmp+n, i); ent[i]++; } if (str[3] == '+') { tmp = str[2]-'A'+1; addEdge(i, tmp+n); ent[tmp+n]++; } else if (str[3] == '-') { tmp = str[2]-'A'+1; addEdge(tmp+n, i); ent[i]++; } if (str[5] == '+') { tmp = str[4]-'A'+1; addEdge(i, tmp+n); ent[tmp+n]++; } else if (str[5] == '-') { tmp = str[4]-'A'+1; addEdge(tmp+n, i); ent[i]++; } if (str[7] == '+') { tmp = str[6]-'A'+1; addEdge(i, tmp+n); ent[tmp+n]++; } else if (str[7] == '-') { tmp = str[6]-'A'+1; addEdge(tmp+n, i); ent[i]++; } }}void work(){ queue<int> ser; for (int i = 1; i <= N; i++) { if (!ent[i]) ser.push(i); } int root; while(!ser.empty()) { root = ser.front(); ser.pop(); for (int i = head[root]; i != -1; i = es[i].next) { ent[es[i].to]--; if (!ent[es[i].to]) ser.push(es[i].to); } } for (int i = 1; i <= N; i++) if (ent[i]) { printf("unbounded"); return; } printf("bounded");}int main(){ readin(); work(); return 0;}
0 0
- ACM/ICPC World Finals 2013 A Self-Assembly
- 例题6-19 自组合(Self-Assembly, ACM/ICPC World Finals 2013, UVa 1572)
- ACM-ICPC 2013 World Finals 简单题解
- ACM/ICPC World Finals 2013 D Factors
- ACM-ICPC World Finals 2017
- ACM/ICPC World Finals 2013 C Surely You Congest
- ACM/ICPC World Finals 2013 F Low Power
- Puzzle, ACM/ICPC World Finals 1993, UVa227
- ACM/ICPC World Finals 2010 D Castles
- Puzzle,ACM/ICPC World Finals 1993,UVa227
- Gym 101205 (ACM-ICPC World Finals 2012)
- Puzzle,ACM/ICPC World Finals 1993, UVa227
- Sqaures, ACM/ICPC World Finals 1990, UVa
- 习题6-12 筛子难题(A Dicey Problem, ACM/ICPC World Finals 1999, UVa810)
- 浙江大学获ACM-ICPC World Finals …
- 【ACM ICPC World Finals 2012】 Curvy Little Bottles (二分)
- Crossword Answers, ACM/ICPC World Finals 1994, UVa232
- Repeating Decimals, ACM/ICPC World Finals 1990, UVa202
- Java学习【网络编程】
- hihocoder #1175 : 拓扑排序·二
- OS X以及iOS平台上的的动态库导出c++接口类
- Java命名规范
- Linux内核与驱动开发学习总结:PCI中线初始化(十一)
- ACM/ICPC World Finals 2013 A Self-Assembly
- zookeeper作为注册中心,使用dubbo
- JSON初步
- FaceBook/infer-InferPrint命令
- 面对我的恐惧——当务之急
- Integer to Roman
- Oracle安装
- Activex开发笔记
- 基于SDF的抽骨架之散点图(Projected points)