hdu 1811 Rank of Tetris (并查集+拓扑排序)
Rank of Tetris
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5415 Accepted Submission(s): 1514
为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜,定时更新,名堂要比福布斯富豪榜还响。关于如何排名,这个不用说都知道是根据Rating从高到低来排,如果两个人具有相同的Rating,那就按这几个人的RP从高到低来排。
终于,Lele要开始行动了,对N个人进行排名。为了方便起见,每个人都已经被编号,分别从0到N-1,并且编号越大,RP就越高。
同时Lele从狗仔队里取得一些(M个)关于Rating的信息。这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rating高于B,等于B,小于B。
现在Lele并不是让你来帮他制作这个高手榜,他只是想知道,根据这些信息是否能够确定出这个高手榜,是的话就输出"OK"。否则就请你判断出错的原因,到底是因为信息不完全(输出"UNCERTAIN"),还是因为这些信息中包含冲突(输出"CONFLICT")。
注意,如果信息中同时包含冲突且信息不完全,就输出"CONFLICT"。
每组测试第一行包含两个整数N,M(0<=N<=10000,0<=M<=20000),分别表示要排名的人数以及得到的关系数。
接下来有M行,分别表示这些关系
CONFLICT
UNCERTAIN
//#define LOCAL
#include<cstdio>
#include<cstring>
#include<vector>
#include<iterator>
#include<queue>
#include<functional>
using namespace std; const int maxn=;
const int nn=; struct path{ int fr,to;
char ss[];
}tt[maxn]; vector<int>aa[nn]; //模拟邻接表
int n,m,num;
int father[nn];
int inde[nn]; //入度 void init(){
for(int i=;i<n;i++)
father[i]=i;
} int fin(int x){
while(x!=father[x])
x=father[x];
return x;
} void unin(int a,int b){
father[b]=a;
} int main()
{
#ifdef LOCAL
freopen("test.in","r",stdin);
#endif while(scanf("%d%d",&n,&m)!=EOF){
init();
num=n;
for(int i=;i<m;i++){
scanf("%d%s%d",&tt[i].fr,tt[i].ss,&tt[i].to);
if(tt[i].ss[]=='='){
int x=fin(tt[i].fr);
int y=fin(tt[i].to);
if(x!=y){
unin(x,y);
num--;
}
}
} bool err=,fight=;
memset(inde,,sizeof(int)*(n+)); for(int i=;i<n;i++)
aa[i].clear(); for(int i=;i<m;i++)
{
if(tt[i].ss[]!='=')
{
int x=fin(tt[i].fr);
int y=fin(tt[i].to);
if(x==y){
err=; //有矛盾
break;
}
//构建拓扑图
if(tt[i].ss[]=='>'){
aa[x].push_back(y);
inde[y]++;
}
else{
aa[y].push_back(x);
inde[x]++; //记录入读的情况
}
}
} if(err){
printf("CONFLICT\n");
continue;
} queue<int>tuop;
//找出所有入度为0的点。
for(int i=;i<n;i++)
if(inde[i]==&&i==fin(i))
tuop.push(i); while(!tuop.empty()){
if(tuop.size()>){
fight=;
} int gt=tuop.front();
tuop.pop();
num--;
vector<int>::iterator ww;
for(ww=aa[gt].begin(); ww!=aa[gt].end();ww++){
inde[*ww]--;
if(inde[*ww]==)
tuop.push(*ww);
}
}
if(num>){ //成环
printf("CONFLICT\n");
continue;
}
if(!fight) printf("OK\n");
else printf("UNCERTAIN\n");
}
return ;
}
hdu 1811 Rank of Tetris (并查集+拓扑排序)的更多相关文章
- 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 ...
- ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线
hdu 1811 Rank of Tetris Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- HDU 1811:Rank of Tetris(并查集+拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description 自从Lele开发了Rating系 ...
- 并查集+拓扑排序 赛码 1009 Exploration
题目传送门 /* 题意:无向图和有向图的混合图判环: 官方题解:首先对于所有的无向边,我们使用并查集将两边的点并起来,若一条边未合并之前, 两端的点已经处于同一个集合了,那么说明必定存在可行的环(因为 ...
- hdu 1811 Rank of Tetris - 拓扑排序 - 并查集
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜, ...
- 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 拓补排序+并查集
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) [ ...
- HDU 1811 Rank of Tetris(并查集+拓扑排序 非常经典)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- Python串口编程
python的串口网上有很多例子,这里了只是把认为好的整理到一起. 首先,应该安装serial模块,还能开始后续的操作.我用的python2.6,serial模块可以在这里下载安装serial模块下载 ...
- 使用entityframework操作sqlite数据库
首先要安装好,所需要的类库,通过NuGet来处理 http://stackoverflow.com/questions/28507904/vs-2015-sqlite-data-provider 安装 ...
- vim 跳到指定行
在编辑模式下输入 ngg 或者 nG n为指定的行数(如25) 25gg或者25G 跳转到第25行. 在命令模式下输入行号n : n 如果想打开文件即跳转 vim +n FileName 查看当然光标 ...
- 关于MySQL数据库如何按时间查询
这里做了几个测试 select * from simingpai where TIMESTAMP(createTime) >= '2015-9-6'; select * from simingp ...
- Codeforces Round #380 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 2) E. Subordinates 贪心
E. Subordinates time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- Codeforces Round #378 (Div. 2) C. Epidemic in Monstropolis 模拟
C. Epidemic in Monstropolis time limit per test 1 second memory limit per test 256 megabytes input s ...
- Spring的自动扫描与管理
通过在classpath自动扫描方式把组件纳入spring容器中管理 前面的例子我们都是使用XML的bean定义来配置组件.在一个稍大的项目中,通常会有上百个组件,如果这些这组件采用xml的bean定 ...
- C运行时的数据结构
本文描述一下:C运行时的数据结构,相关的段,压栈等 unix默认的编译器会将编译生成的文件默认命名为a.out 目标文件和可执行文件可以有几种不同的格式,所有这些不同格式具有一个共同的概念,那就是段. ...
- FFPEG 转码记录------解决了有流,但是没有码率和FPS?
命令行:(已经测试成功) ffmpeg -i rtmp://localhost/live/S0000_8 -c:v libx264 -b:v 500k -c:a libfdk_aac -b:a 64k ...
- 我眼中BA(业务需求分析师)的技能广度和深度
BA,或者称业务分析师,是企业数字能力和业务能力之间的沟通桥梁.随着企业数字转型的进一步深化,相信对BA这样的技能需求会越来越多,只是未必都用“BA/业务分析师”这样的Title. ThoughtWo ...