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又想了一个新点子:他将制作一个全球 ...
随机推荐
- 安装Vmware并破解
1. 先下载Vmware安装包 链接:http://pan.baidu.com/s/1hsjCKgk 密码:c1o6 2. 解压缩 3. 运行VMware-workstation-full-10.0. ...
- Python7 - 面向对象编程进阶
本节内容: 面向对象高级语法部分 经典式 VS 新式类 静态方法,类方法,属性方法 类的特殊方法 反射 异常处理 Socket开发基础 面向对象高级语法部分 经典类 VS 新式类 先看一串代码: cl ...
- SuperDiamond在JAVA项目中的三种应用方法实践总结
SuperDiamond在JAVA项目中的三种应用方法实践总结 1.直接读取如下: @Test public static void test_simple(){ PropertiesConfigur ...
- About me & OI这一年
1 最近碰到一些 OIers 问我学 OI 的经历 回忆了一下,我做的第一道题是A+B Problem,时间:2018年2月15日 呀,正好一年了 2 我是来自 HB 的 OIer 一枚 现在高一,就 ...
- 统计分析与R软件-chapter2-5
2.5 多维数组和矩阵 2.5.1 生成数组或矩阵 数组有一个特征属性叫做维数向量(dim属性),维数向量是一个元素取正整数的向量,其长度是数组的维数,比如维数向量有两个元素时数组为2维数组(矩阵). ...
- Linux内核调试:kdump、vmcore、crash、kernel-debuginfo【转】
转自:https://blog.csdn.net/guowenyan001/article/details/19807555 一.简介 linux内核发送崩溃时,kdump会生成一个内核转储文件vmc ...
- mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系【转】
转自:https://blog.csdn.net/bmw7bmw7/article/details/45876487 我们先来看一个公式:Mipiclock = [ (width+hsync+hfp+ ...
- matlab处理手写识别问题
初学神经网络算法--梯度下降.反向传播.优化(交叉熵代价函数.L2规范化) 柔性最大值(softmax)还未领会其要义,之后再说 有点懒,暂时不想把算法重新总结,先贴一个之前做过的反向传播的总结ppt ...
- 设计模式C++学习笔记之十五(Composite组合模式)
15.1.解释 概念:将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合的使用具有一致性. main(),客户 CCorpNode,抽象基类,实现基本信 ...
- boost.asio包装类st_asio_wrapper开发教程(2013.12.8更新)(二)
如果你是偶然浏览到这里,请先看 源代码及例程下载地址:命令行:svn checkout http://st-asio-wrapper.googlecode.com/svn/trunk/ st-asio ...