hdu 1811 Rank of Tetris
2015-06-04 14:28
363 查看
并查集+拓扑排序
把等号的那些东西都用并查集合并一下,这样一来,建立邻接表的时候用根来建立就好了。
然后就是拓扑排序。
如果有两个入度为0的节点,那么说明肯定是条件不足,
如果有成环的肯定是没法排序了。
把等号的那些东西都用并查集合并一下,这样一来,建立邻接表的时候用根来建立就好了。
然后就是拓扑排序。
如果有两个入度为0的节点,那么说明肯定是条件不足,
如果有成环的肯定是没法排序了。
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; const int maxn = 10010; const int maxnn = 20010; int u[maxnn], v[maxnn], s[maxnn][2]; int father[maxn], rudu[maxn], ff[maxn], yy[maxn]; vector<int>ljb[maxn]; int find(int x) { while (father[x] != x) x = father[x] = father[father[x]]; return father[x]; } int main() { int n, m, i, ii, j; while (~scanf("%d%d", &n, &m)) { int jieguo = 1; for (i = 0; i <= n; i++) father[i] = i; memset(rudu, 0, sizeof(rudu)); memset(ff, 0, sizeof(ff)); for (i = 0; i <= n; i++) ljb[i].clear(); for (i = 0; i < m; i++) scanf("%d%s%d", &u[i], s[i], &v[i]); for (i = 0; i < m; i++) { if (s[i][0] == '=') { int fu = find(u[i]); int fv = find(v[i]); father[fu] = fv; } } int tott = 0; for (i = 0; i < n; i++) { int gen = find(i); if (ff[gen] == 0){ yy[tott] = gen; tott++; ff[gen] = 1; } } for (i = 0; i < m; i++) { if (s[i][0] == '>') { int fu = find(u[i]); int fv = find(v[i]); ljb[fu].push_back(fv); rudu[fv]++; } else if (s[i][0] == '<') { int fu = find(u[i]); int fv = find(v[i]); ljb[fv].push_back(fu); rudu[fu]++; } } int summ, r, cun[maxn], tongji = 0; while (1) { if (tongji == tott) break; summ = 0; for (i = 0; i < tott; i++) if (rudu[yy[i]] == 0) cun[summ] = yy[i], summ++, r = yy[i]; if (summ !=0) { tongji = tongji + summ; if (summ >= 2)jieguo = 3; for (i = 0; i < summ; i++) { rudu[cun[i]]--; for (j = 0; j < ljb[cun[i]].size(); j++) rudu[ljb[cun[i]][j]]--; } } if (summ == 0){ jieguo = 2; break; } } if (jieguo == 1) printf("OK\n"); else if (jieguo == 2) printf("CONFLICT\n"); else if (jieguo == 3) printf("UNCERTAIN\n"); } return 0; }
相关文章推荐
- SeAndroid上指纹系统的权限说明
- mysql表修复
- plsql developer乱码解决方法
- bug记录:IE8,包含块min-height/height共存时的高度计算bug
- vim基础命令
- EF 事物
- sqlserver 自定义字符串分割函数.
- 百度定位SDK使用
- Binary Tree Inorder Traversal
- IE6支持兼容max-height、min-height CSS样式
- 计算视图传参
- SpringMVC 学习笔记(一) Hello World
- 想辞职 想跳槽
- Android自定义控件实战——仿淘宝商品浏览界面
- 有关Angular 2.0的一切
- Hacking PostgreSQL
- android 自定义Adapter
- 分布式MySQL数据库TDSQL架构分析
- android动态修改app桌面icon
- 第十四周阅读程序(2):标准类型数据的格式输出