hdu1811 拓扑排序+并查集缩点
/*
给定两个点之间的三种关系 = < >
如果是=就将两点放到同一个集合里进行缩点
离线处理所有关系,先用并查集将等于关系缩成一个点
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 20005
struct Query{int u,v;char ch;}q[maxn];
struct Edge{int to,nxt;}edge[maxn<<];
int n,m,head[maxn],tot;
void init(){
memset(head,-,sizeof head);
tot=;
}
void addedge(int u,int v){
edge[tot].to=v;edge[tot].nxt=head[u];head[u]=tot++;
} /*并查集*/
int f[maxn];
int find(int x){
return f[x]==-?x:f[x]=find(f[x]);
}
void bing(int a,int b){
int t1=find(a);
int t2=find(b);
if(t1!=t2)f[t1]=t2;
} int in[maxn];
int main(){
while(cin>>n>>m){
init();
memset(f,-,sizeof f);
memset(in,,sizeof in);
for(int i=;i<=m;i++)
cin>>q[i].u>>q[i].ch>>q[i].v;
for(int i=;i<=m;i++)
if(q[i].ch=='=')
bing(q[i].u,q[i].v);
for(int i=;i<=m;i++)
q[i].u=find(q[i].u),q[i].v=find(q[i].v); for(int i=;i<=m;i++){
if(q[i].ch=='=')continue;
if(q[i].ch=='<'){
in[q[i].u]++;
addedge(q[i].v,q[i].u);
}
if(q[i].ch=='>'){
in[q[i].v]++;
addedge(q[i].u,q[i].v);
}
} int flag=,cnt=;
queue<int>que;
for(int i=;i<n;i++)
if(f[i]==-)cnt++;
for(int i=;i<n;i++)
if(f[i]==- && in[i]==)
que.push(i);
if(que.size()>)flag=;
while(!que.empty()){
int u=que.front();
que.pop();
cnt--;
for(int i=head[u];i!=-;i=edge[i].nxt){
int v=edge[i].to;
in[v]--;
if(in[v]==)
que.push(v);
}
if(que.size()>)flag=;
}
if(cnt>)puts("CONFLICT");
else if(flag==)puts("UNCERTAIN");
else puts("OK");
}
}
hdu1811 拓扑排序+并查集缩点的更多相关文章
- Rank of Tetris(hdu1811拓扑排序+并查集)
题意:关于Rating的信息.这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rati ...
- 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 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu1811 Rank of Tetris 拓扑排序+并查集
这道题是拓扑排序和并查集的综合运用. 由于排行榜是一种从高到低的排序.所以在拓扑排序的时候,如果有一次加入的入度为零的点数大于1,就有变得不确定了(UNCERTAIN). 由于只有一棵树,当树的数量大 ...
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
- hdu 1811 Rank of Tetris - 拓扑排序 - 并查集
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...
- 拓扑排序+并查集——cf1131D
以前做过了忘记掉了..拓扑排序如果要处理等于关系,就要用并查集把相等关系进行缩点 /* 1.相等关系用并查集合并 2.不等关系用有向边链接 3.拓扑排序求顺序 */ #include<bits/ ...
- 拓扑排序 - 并查集 - Rank of Tetris
Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...
随机推荐
- Python 8 - Socket编程进阶
本节内容: 1.Socket语法及相关 2.SocketServer实现多并发 Socket语法及相关 socket 概念 socket本质上就是在2台网络互通的电脑之间架设一个通道,两台 ...
- Java生成短链接
为什么要生成短链接 微博之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少. 那么使用短链接的作用有哪些呢?1.字数,2.统计,3.监控,4.过滤 ...
- 如何预览Github上的页面
参考链接:https://www.jianshu.com/p/46ddd926f005
- 使用CORS方式跨域
什么是CORS CORS(Cross-Origin Resource Sharing 跨源资源共享),当一个请求url的协议.域名.端口三者之间任意一与当前页面地址不同即为跨域. ===前端 不需要携 ...
- 连接字符串配置在App.config中
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectio ...
- MFC修改对话框标题
对话框标题栏内容为静态 直接在对话框属性"常规"的"Caption"中修改. 动态生成对话框标题栏内容 SetWindowText()函数就可以 CString ...
- uio.c 分析【转】
转自:https://blog.csdn.net/ganggexiongqi/article/details/6737647 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- python操作Excel的库openpyxl
http://openpyxl.readthedocs.io/en/default/tutorial.html 这里先上该库的文档镇文. 1,遇到合并后的单元格信息读取的问题,通过使用cell中off ...
- 012_k8s专题系列一之进入容器日常op
一.下面列出如何进入正在运行的k8s容器 <1> kubectl get pods #查看所有正在运行的pod NAME READY STATUS RESTARTS AGE nginx-5 ...
- 前端 ---BOM的介绍
BOM的介绍 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象模型,操作网页上的 ...