HDU 1811
http://acm.hdu.edu.cn/showproblem.php?pid=1811
中文码题
对于等号的情况,用并查集合并(因为编号不同一定可以分出先后)
然后判断能否构成拓扑排序,以及拓扑排序是不是唯一的
题不难,考验代码能力,能1A证明手感还不错
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <algorithm>
#include <queue>
#include <cmath>
#include <stack>
#include <set> using namespace std; int vis[],head[],cnt,fa[],st[]; struct p{
int a,b;
char op[];
}kk[]; struct node{
int s,t,nxt;
}e[]; void add(int s,int t){
e[cnt].s=s;e[cnt].t=t;e[cnt].nxt=head[s];head[s]=cnt++;
} void INIT(){
cnt=;
memset(head,-,sizeof(head));
} int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
} int dfs(int u){
vis[u]=-;
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].t;
if(vis[v]<)return ;
else if(!vis[v] && !dfs(v))return ;
}
vis[u]=;
return ;
} int OK(int n){
for(int i=;i<n;i++){
if(!vis[i] && !st[i] && !dfs(i))return ;
}
return ;
} int IN[]; int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
INIT();
for(int i=;i<n;i++)fa[i]=i;
memset(IN,,sizeof(IN));
memset(st,,sizeof(st));
int flag=;
for(int i=;i<m;i++){
scanf("%d%s%d",&kk[i].a,kk[i].op,&kk[i].b);
if(kk[i].op[]=='='){
int pa=find(kk[i].a);
int pb=find(kk[i].b);
if(pa!=pb){
fa[pa]=pb;
st[pa]=;
}
}
else{
int pa=find(kk[i].a);
int pb=find(kk[i].b);
if(pa==pb)flag=;
}
}
if(!flag)puts("CONFLICT");//所给信息矛盾
else{
for(int i=;i<m;i++){
if(kk[i].op[]=='>'){
add(find(kk[i].a),find(kk[i].b));
IN[find(kk[i].b)]++;
}
else if(kk[i].op[]=='<'){
add(find(kk[i].b),find(kk[i].a));
IN[find(kk[i].a)]++;
}
}
memset(vis,,sizeof(vis));
if(!OK(n))puts("CONFLICT");//有环
else{
queue <int> q;
for(int i=;i<n;i++){
if(!st[i] && !IN[i])
q.push(i);
}
int flag=;
while(!q.empty()){
if(q.size()>){
flag=;
break;
}
int u=q.front();
q.pop();
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].t;
IN[v]--;
if(!IN[v])q.push(v);
}
}
if(!flag)puts("UNCERTAIN");//拓扑结构一层多于一个点,有多种情况
else puts("OK");
}
}
}
return ;
}
HDU 1811的更多相关文章
- ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线
hdu 1811 Rank of Tetris Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 1811 Rank of Tetris
http://acm.hdu.edu.cn/showproblem.php?pid=1811 拓扑排序和并差集 #include <cstdio> #include <queue&g ...
- hdu 1811 Rank of Tetris - 拓扑排序 - 并查集
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...
- HDU 1811:Rank of Tetris(并查集+拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description 自从Lele开发了Rating系 ...
- HDU 1811 并查集+拓扑排序
Rank of Tetris 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1811 Problem Description 自从Lele开发了Rati ...
- HDU 1811 Rank of Tetris(拓扑排序+并查集)
题目链接: 传送门 Rank of Tetris Time Limit: 1000MS Memory Limit: 32768 K Description 自从Lele开发了Rating系统, ...
- HDU 1811 并查集
题意: 思路:topo+并查集 #include <cstdio> #include <vector> #include <algorithm> #include ...
随机推荐
- iOS机器学习-TensorFlow
人工智能.机器学习都已走进了我们的日常,尤其是愈演愈热的大数据更是跟我们的生活息息相关,做 人工智能.数据挖掘的人在其他人眼中感觉是很高大上的,总有一种遥不可及的感觉,在我司也经常会听到数据科学部的同 ...
- ABAP之DIALOG
明天系统上线,数据一团糟,没人提BUG,无聊ING.... 今天说说SAP开发常用的DIALOG吧 一般单独的DIALOG程序可以直接建成函数组,功能组,普通报表程序. 基本都是统一的样式,主程序中I ...
- JavaScrip的DOM操作(13号讲)
1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型,文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西 2.Windows对象操作 一.属性和方法 二.Window.open(& ...
- 从java 转到 c# 知识点
1. 重写的父类方法 必须是虚方法 用virtual 关键字修饰 而子类必须用 ovrride 关键字 java中不需要,, 2. namespace => packet using => ...
- python与字符集编码
讲的比较明白的博客:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 以上面博文的汉为例子,汉字的GBK编码是baba, UNIC ...
- com组件接口
int main( int argc, char *argv[] ) { cout << "Initializing COM" << endl; ...
- 开源项目导入eclipse的一般步骤[转]
下载到开源项目后,我们还是希望导入到eclipse中还看,这样要方便点,一般的步骤是这样的 打开源代码目录, 如果看到里面有.calsspath .project文件,那么说明这个项目本来就是ec ...
- ORACLE 一致性读原理记录
什么是一致性读? 一致性读指的是在从查询那一刻起,中间的变化不予理会. 举例说明 比如我有两个帐户A,B. A 有1000块,B有1000快.我查询的时候查询速度比较慢.中间A转500到B账户. 已经 ...
- DQL查询语句内容整理
select * from t_hq_ryxx; select bianh,xingm from t_hq_ryxx; --为字段名定义别名 select bianh as 编号,xingm as 姓 ...
- CPU是怎么制造的
大概的过程就是,先选一堆好沙子(纯净的沙子),初步加工一般在沿海,然而都是初加工,因为技术不行,所以一般用比较污染环境的方法加工大99.9%纯度的硅,然后低价卖给国外企业,用高精尖技术加工到99.99 ...