hdu 1811拓扑排序+并查集(容器实现)
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 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线
hdu 1811 Rank of Tetris Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- hdu 1811 Rank of Tetris - 拓扑排序 - 并查集
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...
- hdu 1811(缩点+拓扑排序+并查集)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 1811 Rank of Tetris(拓扑排序+并查集)
题目链接: 传送门 Rank of Tetris Time Limit: 1000MS Memory Limit: 32768 K Description 自从Lele开发了Rating系统, ...
- 拓扑排序 - 并查集 - Rank of Tetris
Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...
- LA 4255 (拓扑排序 并查集) Guess
设这个序列的前缀和为Si(0 <= i <= n),S0 = 0 每一个符号对应两个前缀和的大小关系,然后根据这个关系拓扑排序一下. 还要注意一下前缀和相等的情况,所以用一个并查集来查询. ...
- Rank of Tetris(hdu1811拓扑排序+并查集)
题意:关于Rating的信息.这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rati ...
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
随机推荐
- react key的作用
react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key props),而是给react自己用的. 简单来说,react利用key ...
- macbookpro安装Ubuntu16.04.1 LTS爬坑之旅。亲测有效(集众家之长)。安装时间为2017-11-19。
1.格式化U盘 要求:(1)切换分区格式为Mac OS扩展 (日志型):(2)方案(scheme)设置为:GUID Partition Map:如图(使用mac自带磁盘工具) 2.给Ubuntu划分磁 ...
- c语言小项目-使用mysql数据库的图书管理系统
VS2013通过MySQL方式连接到MySQL MySQL官网上C++的API有两个.一个是很成熟的mysql++,另一个是MySQL Connector/C++,近两年才出的,模仿JDBC做的,封装 ...
- 一个包含所有C++头文件的头函数
#include<bits/stdc++.h> using namespace std; 使用方法和平常的头文件一样,#include<bits/stdc++.h>包含以下头文 ...
- Java compiler level does not match the version of the installed Java project facet问题处理
从SVN上下载应用后在Problems面板中提示以下错误信息: Java compiler level does not match the version of the installed Java ...
- 6.12---bug
- redis学习-字典
1.字典作用 实现数据库键空间(key space): 用作 Hash 类型键的底层实现之一: 2.字典实现的数据结构 typedef struct dict { // 特定于类型的处理函数 dict ...
- Eclipse开发工具介绍
Eclipse是一个基于Java的.开放源码的.可扩展的应用开发平台,它为编程人员提供了一流的Java集成开发环境(Integrated Development Environment,IDE).在E ...
- PHP——基本使用(一)
Apache安装与配置 install 下载地址:https://www.apachelounge.com/download/,选择2.4.33版本64位 将程序解压到一个英文目录下,以管理身份打开c ...
- 3星|《未来公司》:Uber简史
未来公司(卡兰尼克和他的Uber帝国)(精) 从Uber创始人卡兰尼克的角度讲的Uber简史,截止到2017年.书中有不少Uber的负面新闻,比国内的同类书要好. 基本是流水账.想了解这家公司的历史, ...