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 ...
随机推荐
- 暴力 hihoCoder 1178 计数
题目传送门 /* 暴力:这题真是醉了,直接暴力竟然就可以了!复杂度不会分析,不敢写暴力程序.. 枚举x,在不重复的情况下+ans,超过范围直接break */ #include <cstdio& ...
- 通过Fiddler监控Java应用发送请求及相应数据
Fiddler可以很好的监控浏览器发送的各种请求及响应数据,对于JAVA程序默认情况下是无法监控的,但实际需求中需要监控JAVA程序发送HTTP请求及返回数据是否正确. Fiddler默认配置的监听端 ...
- sdut1933WHUgirls(dp)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1933 矩形的dp一般挺类似 大的矩形都是由小 ...
- 开发小Tips
Kotlin语言篇: 1.抽象类的定义 abstract class Person(var name : String, var age : Int) : Any() { abstract var a ...
- 短视频SDK在广电系统的解决方案
锐动视频编辑SDK集手机视频拍摄和视频剪辑主要功能于一体,同时包含手机端视频配音配乐,字幕特效,滤镜,转场特效等各种功能,全方位满足开发者的需求,并可以快速植入到APP中. 手机端的摄像头录制和直播功 ...
- VS项目属性配置总结
以下是针对VS2013下的VC++项目: Debug和Release说明: Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进 ...
- java格式化sql
在日志分析中,经常会对记录的sql进行分析,所以将一整行sql格式化,进行多行缩就显得很有必要,许多数据库客户端都提供sql的格式化功能,但复杂的多层嵌套sql往往格式化的l还不够友好,所以就自己造了 ...
- K近邻法(K-Nearest Neighbor,KNN)
KNN是一种基本分类与回归方法,本篇只总结分类问题中的KNN. 输入:样本的特征向量,对应于特征空间中的点 输出:样本的类别,可取多类 算法思想:给定一个样本类别已知的训练数据集,对于新样本,根据其K ...
- PHP 之PHP + phantomJS实现网站截屏
php代码: exec("G:/phpstudy/WWW/destoon/api/a/cache/web/phantomjs.exe ./get.js http://www.baidu.co ...
- docker数据卷的管理和使用
数据卷的使用,数据库可以保证如果容器出现问题但是数据不丢失的作用,比如MySQL/date下的数据 或者Nginx根目录下的index.html 查看数据卷 [root@docker ~]# dock ...