HDU1811 并查集+拓扑排序
题目大意:
判断是否能根据给定的规则将这一串数字准确排序出来
我们用小的数指向大的数
对于相等的情况下,将二者合并到同一个并查集中,最后抽象出来的图上面的每一个点都应该代表并查集的标号
#include <cstdio>
#include <cstring>
#include <stack>
#include <iostream>
using namespace std; #define N 10005
char s[N<<][];
int fa[N] , first[N] , in[N] , k , cnt;//fa[i]保存的是i点处于的并查集号,cnt记录最后剩下的并查集数
bool vis[N];//判断对应下标的集合是否会进入最后生成的图中
struct Edge{
int y,next;
}e[N<<]; void add_edge(int x,int y)
{
in[y]++;
e[k].y = y , e[k].next=first[x];
first[x] = k++;
} void init(int n)
{ k=;
memset(first , - , sizeof(first));
memset(in,,sizeof(in));
for(int i=;i<n;i++)
fa[i] = i , vis[i] = true;
} int find_fa(int x)
{
while(x!=fa[x])
x=fa[x];
return x;
} void Union(int a , int b)
{
int fa1_set = find_fa(a);
int fa2_set = find_fa(b);
if(fa1_set != fa2_set)
{
fa[fa2_set] = fa1_set , cnt--;
vis[fa2_set] = false; //fa2_set集合被合并,所以最后不会进入图中,所以将其舍去
}
} int tuopu(int n)
{
stack<int> s;
for(int i = ; i<n ; i++){
if(vis[i] && !in[i]) s.push(i);
}
int flag = ;
for(int i= ; i<cnt ; i++){
if(s.empty()) return -;
if(s.size() > ) flag = ;
int u = s.top();
s.pop();
for(int j=first[u] ; j!=- ; j=e[j].next){
int v = e[j].y;
in[v]--;
if(!in[v]){
s.push(v);
}
}
}
if(!flag) return ;
return ;
} int main()
{
// freopen("a.in" , "rb" ,stdin);
int n , m , a[N] , b[N];
while(scanf("%d%d",&n,&m)!=EOF)
{
init(n);
cnt = n; for(int i=;i<m;i++){
scanf("%d%s%d",&a[i],s[i],&b[i]);
if(s[i][] == '='){
Union(a[i],b[i]);
}
}
//cout<<"cnt: "<<cnt<<endl;
for(int i = ; i<m ; i++){
int fa1 = find_fa(a[i]);
int fa2 = find_fa(b[i]);
if(s[i][] == '<'){
add_edge(fa1 , fa2);
}
else if(s[i][] == '>'){
add_edge(fa2 , fa1);
}
}
int flag = tuopu(n);
if(flag == ) puts("OK");
if(flag == -) puts("CONFLICT");
if(flag == ) puts("UNCERTAIN");
}
return ;
}
HDU1811 并查集+拓扑排序的更多相关文章
- 并查集+拓扑排序 赛码 1009 Exploration
题目传送门 /* 题意:无向图和有向图的混合图判环: 官方题解:首先对于所有的无向边,我们使用并查集将两边的点并起来,若一条边未合并之前, 两端的点已经处于同一个集合了,那么说明必定存在可行的环(因为 ...
- HDU 1811:Rank of Tetris(并查集+拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description 自从Lele开发了Rating系 ...
- 【并查集+拓扑排序】【HDU1811】【Rank of Tetris】
题意:给你3种关系 A=B,A>B,A<B 问是否排名方式唯一,或者存在矛盾 解 1.读入数据先处理 =号 用并查集的祖先作为代表元素,其他儿子节点都等于跟这个点重叠. 再读入 '< ...
- hdu1811 Rank of Tetris 并查集+拓扑排序
#include <stdio.h> #include <string.h> #include <vector> #include <queue> us ...
- hdu 1811Rank of Tetris (并查集 + 拓扑排序)
/* 题意:这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rating高于B,等于B ...
- hdu1811 并查集+拓扑序
题意:现在有一个排名系统,有一系列信息,分别是 > < = 的比较,而如果最终相等,就会将这些相等的按照序号从小到大排,问给出的信息是否可以确定完整的排序. 由于如果很多点相等,他们肯定能 ...
- Codeforces Round #541 (Div. 2) D(并查集+拓扑排序) F (并查集)
D. Gourmet choice 链接:http://codeforces.com/contest/1131/problem/D 思路: = 的情况我们用并查集把他们扔到一个集合,然后根据 > ...
- Codeforces Round #541 (Div. 2) D 并查集 + 拓扑排序
https://codeforces.com/contest/1131/problem/D 题意 给你一个n*m二维偏序表,代表x[i]和y[j]的大小关系,根据表构造大小分别为n,m的x[],y[] ...
- HDU 1811 Rank of Tetris(并查集+拓扑排序 非常经典)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- 在 c#中 如何 重新激活一个控件
比如toolBar是一个组合控件 this.toolBar.CaptionHeight =this.toolBar.Items.Count * 60;//重新激活toolBar控件 CaptionHe ...
- css超出部分显示省略号
单行文本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- 436 Find Right Interval 寻找右区间
给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”.对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着 ...
- 转】RMySQL数据库编程指南
原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/2/ 感谢! Posted: Sep 24, 2013 Ta ...
- 从0开始的hbase
2016马上要结束了,回顾一下这一年对hbase的学习历程. 1,年初hbase的状态 使用场景:主要是用来存储业务线的mysql表,增量同步到hbase,然后每天晚上全量导入hdfs做离线计算. h ...
- 解决okHttp使用https抛出stream was reset: PROTOCOL_ERROR的问题
昨天在做Android接口调用的时候,api接口是https的,用okhttp抛出: okhttp3.internal.http2.StreamResetException: stream was r ...
- 解决webstromm标签高亮问题
2017/2016版
- (Android MVVM)使用Data Binding Library(2)
复习 上一篇学到了如何在layout.xml文件中增加元素,实现数据绑定,本篇接着学习. 事件处理 在layout.xml上绑定事件有两种方法,各有千秋. 1.方法引用 2.监听绑定 1.使用方法引用 ...
- scala.的Enumeration枚举示例(转)
简介 在scala中没有枚举类型,但在标准类库中提供了Enumeration类来产出枚举.扩展Enumeration类后,调用value方法类初始化枚举中的可能值. 内部类value实际上是一个抽象类 ...
- Compiler 1.6.5 —1.6.7
Compiler 1.6.5 —1.6.7 Dynamic Scope Technically, any scoping policy is dynamic if it is based on fa ...