hdu 1811 经典拓扑排序+并查集
来源:互联网 发布:什么软件卖二手手机 编辑:程序博客网 时间:2024/06/15 17:00
#include<bits/stdc++.h>using namespace std;const int maxn=20005;struct node{int up,down;char cc;}a[maxn];int in[maxn],fa[maxn];vector<int> edge[maxn];int find(int num){ return fa[num]==num?num:fa[num]=find(fa[num]);}int main(){ int n,m,i,j,sum,flag; char ch; while(scanf("%d%d",&n,&m)!=EOF) { for(i=flag=0;i<=n;i++) { in[i]=0; fa[i]=i; edge[i].clear(); } sum=n; for(i=0;i<m;i++) { scanf("%d ",&a[i].up); a[i].cc=getchar(); scanf("%d",&a[i].down); if(a[i].cc=='=') { int sa=find(a[i].up),sb=find(a[i].down); if(sa!=sb) { fa[sa]=sb; sum--; } } } for(i=0;i<m;i++) { if(a[i].cc!='=') { int sa=find(a[i].up),sb=find(a[i].down); if(a[i].cc=='>') { edge[sa].push_back(sb); in[sb]++; } else { in[sa]++; edge[sb].push_back(sa); } } } queue<int> que; for(i=0;i<n;i++) if(in[i]==0&&find(i)==i) que.push(i); while(que.size()) { if(que.size()>1) flag=1; int now=que.front(); que.pop(); sum--; for(vector<int>::iterator i=edge[now].begin();i!=edge[now].end();i++) { in[*i]--; if(in[*i]==0) que.push(*i); } } if(sum>0) printf("CONFLICT\n"); else if(flag) printf("UNCERTAIN\n"); else printf("OK\n"); } return 0;}
阅读全文
0 0
- hdu 1811 经典拓扑排序+并查集
- hdu 1811 并查集 + 拓扑排序
- hdu 1811 拓扑排序+并查集
- hdu 1811 拓扑排序,查并集
- hdu 1811 拓扑排序+并查集
- hdu 1811 并查集+拓扑排序
- hdu 1811 拓扑排序+并查集
- hdu 1811 拓扑排序+并查集
- hdu 1811 并查集+拓扑排序
- hdu 1811(拓扑排序+并查集)
- hdu 1811 并查集+拓扑排序
- hdu--1811(拓扑排序+并查集)
- hdu 拓扑排序+并查集
- hdu 1811 rank of tetras 拓扑排序+并查集
- hdu 1811Rank of Tetris (并查集+拓扑排序)
- HDU 1811 Rank of Tetris(拓扑排序+并查集)
- HDU 1811 Rank of Tetris(拓扑排序+并查集)
- hdu 1811拓扑排序+并查集(容器实现)
- 学习使用GitHub/Git
- 备忘学习OpenCV中遇到的问题,不定期更新
- poj 1050最大子矩阵
- 林纳斯·托瓦斯(Linux内核之父)
- 赋值运算符及扩展的赋值运算符
- hdu 1811 经典拓扑排序+并查集
- HBase分析之Get、Scan(二)RegionScanner
- vmware虚拟机安装CentOS7后网络配置
- 一些android预装应用名字对应关系
- linux 下vi编辑的一些实用命令
- 大数--hdu5920 Ugly Problem
- KNN简单实现
- 欢迎使用CSDN-markdown编辑器
- html&css基础总结