博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1811 Rank of Tetris(并查集+拓扑排序 非常经典)
阅读量:5093 次
发布时间:2019-06-13

本文共 2743 字,大约阅读时间需要 9 分钟。

Rank of Tetris

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 12344    Accepted Submission(s): 3497

Problem Description
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球。
为了更好的符合那些爱好者的喜好,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"。
 

 

Input
本题目包含多组测试,请处理到文件结束。
每组测试第一行包含两个整数N,M(0<=N<=10000,0<=M<=20000),分别表示要排名的人数以及得到的关系数。
接下来有M行,分别表示这些关系
 

 

Output
对于每组测试,在一行里按题目要求输出
 

 

Sample Input
3 3 0 > 1 1 < 2 0 > 2 4 4 1 = 2 1 > 3 2 > 0 0 > 1 3 3 1 > 0 1 > 2 2 < 1
 

 

Sample Output
OK CONFLICT UNCERTAIN
 

 

Author
linle
 

 

Source
 

 

Recommend
lcy   |   We have carefully selected several similar problems for you:            
 
分析:
如果直接拓扑的话,等号的情况很麻烦
一.采用并查集处理=号的情况
把具有等号关系的点聚合成为一个连通分量,且只用该连通分量的根结点替代分量中的所有点
比如A=B=C=D
以后A,B,C,D这四个点就只用A来表示
 
需要注意的地方:
1.必须先处理完所有的等号之后再进行拓扑排序(最后才想到!!!)
2.因为存在等号,我们有把等号处理了,所有我们可以拓扑的点可能不是n个了,而是根结点的个数个
 
2.采用拓扑排序处理>和<的情况
 
ps:
冲突情况:存在环,也就是进入队列的点不等于可以拓扑的点
信息不完全:某时刻队列里面元素个数大于1个,说明图不是连通图
 
 
必须先处理完所有等号的情况才能进行拓扑!!!
wa好多次
 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;int mon1[13]= { 0,31,28,31,30,31,30,31,31,30,31,30,31};int mon2[13]= { 0,31,29,31,30,31,30,31,31,30,31,30,31};int dir[4][2]= { { 0,1},{ 0,-1},{ 1,0},{-1,0}};int getval(){ int ret(0); char c; while((c=getchar())==' '||c=='\n'||c=='\r'); ret=c-'0'; while((c=getchar())!=' '&&c!='\n'&&c!='\r') ret=ret*10+c-'0'; return ret;}#define max_v 20005int pa[max_v];int rk[max_v];int indgree[max_v];int a[max_v],b[max_v];char o[max_v];queue
q;vector
vv[max_v];int n,m,cnt;int fa_num;void init(){ for(int i=0; i<=n; i++) pa[i]=i,rk[i]=0; memset(indgree,0,sizeof(indgree)); while(!q.empty()) q.pop(); for(int i=0; i<=n; i++) vv[i].clear(); fa_num=0; cnt=0;}int find_set(int x){ if(x!=pa[x]) pa[x]=find_set(pa[x]); return pa[x];}void union_set(int x,int y){ x=find_set(x); y=find_set(y); if(x==y) return ; if(rk[x]>rk[y]) pa[y]=x; else { pa[x]=y; if(rk[x]==rk[y]) rk[y]++; }}int tpsort(){ for(int i=1; i<=n; i++) { if(find_set(i)==i)//拓扑点必须是根结点 { fa_num++;//计数 根结点 if(indgree[i]==0) q.push(i); } } int temp; int flag=0; while(!q.empty()) { if(q.size()>1) flag=1;//信息不完全 temp=q.front(); q.pop(); cnt++; for(int i=0; i

 

 
 

转载于:https://www.cnblogs.com/yinbiao/p/9845756.html

你可能感兴趣的文章
App右上角数字
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IOS-图片操作集合
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
测试计划
查看>>
Mysql与Oracle 的对比
查看>>
jquery实现限制textarea输入字数
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
c# 泛型+反射
查看>>
第九章 前后查找
查看>>
Python学习资料
查看>>