hdu 1811拓扑排序+并查集(容器实现)
来源:互联网 发布:steam淘宝喜加一 编辑:程序博客网 时间:2024/04/29 23:37
http://www.cnblogs.com/newpanderking/archive/2012/10/18/2729566.html
#include<stdio.h>
#include<iostream>#include<vector>
#include<queue>
using namespace std;
const int N=11000;
vector<int>link[N];//容器来是模拟邻接表
int pre[N],a[N],b[N],indegree[N],n,m,sum;
char c[N];
int find(int x) {//路径压缩
if(x!=pre[x])
pre[x]=find(pre[x]);
return pre[x];
}
int Union(int x,int y) {//合并
int f1=find(x);
int f2=find(y);
if(f1==f2)
return 0;
pre[f1]=f2;
return 1;
}
void bfs() {
queue<int>q;
int i,flag;
for(i=0;i<n;i++) {
if(find(i)==i&&indegree[i]==0)//将所有第一名的代表放进队列
q.push(i);
} flag=0;
while(!q.empty()) {//队列实现拓扑排序
int cur=q.front();
if(q.size()>1)flag=1;//信息已经不完整了,但是还有可能含有冲突
q.pop();////和上面的q.size()的判断的顺序不能交换
for(i=0;i<link[cur].size();i++)
if(--indegree[link[cur][i]]==0)
q.push(link[cur][i]);
sum--;
}
if(sum>0)//冲突优先
printf("CONFLICT\n");
else
if(flag==1)//没有冲突了看信息是否完整
printf("UNCERTAIN\n");
else
printf("OK\n");
}
int main() {
int i,f1,f2;
while(scanf("%d%d",&n,&m)!=EOF) {
for(i=0;i<n;i++) {//初始化
link[i].clear();
pre[i]=i;
}
sum=n;
for(i=0;i<m;i++) {
scanf("%d %c%d",&a[i],&c[i],&b[i]);
if(c[i]=='=')
if(Union(a[i],b[i]))
sum--;
}
memset(indegree,0,sizeof(indegree));//入度
for(i=0;i<m;i++)
if(c[i]!='=') {
f1=find(a[i]);
f2=find(b[i]);
if(c[i]=='>') {
link[f1].push_back(f2);
indegree[f2]++;
}
else {
link[f2].push_back(f1);
indegree[f1]++;
}
}
bfs();
}
return 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 1811(拓扑排序+并查集)
- 【1】HDU 1811(拓扑排序+并查集)
- HDU 1811 Rank of Tetris(拓扑排序,队列实现,并查集)
- HDU 1811(拓扑&&并查集)
- hdu 拓扑排序+并查集
- hdu 1811 rank of tetras 拓扑排序+并查集
- 简单十步让你全面理解SQL
- CentOS Linux防火墙配置及关闭
- java的new BufferedReader(new InputStreamReader(System.in))
- Linux下编译升级内核
- acm--首字母变大写
- hdu 1811拓扑排序+并查集(容器实现)
- ios状态栏操作
- Java基础&增强 反射 注解 类加载器
- 适配iOS7开发1
- Quartz 使用(2.x版本)
- 折腾二维数组
- asp_异步_修改_如何实现父子页面之间的相互交互
- 如何获取磁盘剩余空间(包括光驱中的光盘)
- 算法导论C语言实现: 计数排序