hdu 1811 Rank of Tetris
2013-08-14 11:20
423 查看
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1811
这题的关键点就是对 “=” 的处理,这个要用到并查集。把是“=”关系的点放在统一集合内,处理其中每一个点时都当做处理根结点。
数据不全的情况是同时出现两个点的入度为0,(当两个点具有“ = ”关系时,我们默认是一个点)。
源代码:
http://acm.hdu.edu.cn/showproblem.php?pid=1811
这题的关键点就是对 “=” 的处理,这个要用到并查集。把是“=”关系的点放在统一集合内,处理其中每一个点时都当做处理根结点。
数据不全的情况是同时出现两个点的入度为0,(当两个点具有“ = ”关系时,我们默认是一个点)。
源代码:
#include<iostream> #include<vector> #include<queue> #include<stdio.h> #include<cstring> #define maxn 100010 using namespace std; int a[maxn],b[maxn],from[maxn],pa[maxn],sum,n,m; queue<int>q; char c[maxn]; vector<int>map[maxn]; bool uncertain; int find(int a){ if(pa[a] == a)return a; return pa[a] = find(pa[a]); } int link(int a,int b){ a = find(a); b = find(b); //没写这个就re了…… if(a==b)return 0; pa[b]=a; return 1; } void topo(){ for(int i=0;i<n;i++) if(from[i]==0&&find(i)==i){ q.push(i); } while(!q.empty()){ if(q.size()>1) uncertain=true; int temp=q.front(); q.pop(); sum--; for(int i=0;i<map[temp].size();i++) { if(--from[map[temp][i]]==0){ q.push(map[temp][i]); } } } } int main(){ while(scanf("%d %d",&n,&m)!=EOF){ uncertain=false; sum=n; memset(from,0,sizeof(from)); for(int i=0;i<n;i++){ pa[i]=i; map[i].clear(); } for(int i=0;i<m;i++){ scanf("%d %c %d",&a[i],&c[i],&b[i]); if(c[i]=='=') { //对“=”预处理 if(link(a[i],b[i])) sum--; } } for(int i=0;i<m;i++){ int x=find(a[i]); int y=find(b[i]); if(c[i]=='=') continue; if(c[i]=='>') { map[x].push_back(y); from[y]++; } if(c[i]=='<'){ map[y].push_back(x); from[x]++; } } topo(); if(sum>0)printf("CONFLICT\n"); else if(uncertain) printf("UNCERTAIN\n"); else printf("OK\n"); } }
相关文章推荐
- HDU 1811 Rank of Tetris
- HDU 1811 Rank of Tetris
- HDU 1811 Rank of Tetris
- Rank of Tetris (hdu 1811 拓扑排序)
- HDU 1811 Rank of Tetris
- HDU-1811-Rank of Tetris
- hdu-1811 Rank of Tetris
- hdu 1811 Rank of Tetris
- 并查集+拓扑 hdu 1811 Rank of Tetris
- hdu 1811 Rank of Tetris
- HDU 1811 Rank of Tetris
- hdu 1811 Rank of Tetris
- HDU 1811 Rank of Tetris
- HDU 1811 Rank of Tetris
- HDU - 1811 Rank of Tetris
- HDU 1811 Rank of Tetris
- hdu 1811 Rank of Tetris
- hdu 1811 Rank of Tetris
- HDU-1811 Rank of Tetris
- hdu 1811 Rank of Tetris