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): 11843 Accepted Submission(s): 3362
http://acm.hdu.edu.cn/showproblem.php?pid=1811
为了更好的符合那些爱好者的喜好,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行,分别表示这些关系
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
#define M 20005
#define N 105
int l[M],r[M],head[M],aa[M],m,n,rudu[M];
char ch[M];
struct node
{int to,next;
}bian[M];
int find(int a)
{while(a!=aa[a])a=aa[a];return a;
}
void inti()
{memset(rudu,0,sizeof(rudu));memset(head,-1,sizeof(head));for(int i=0;i<=n;i++)aa[i]=i;
}
int top=0;
void add(int a,int b)
{bian[top].to=b;bian[top].next=head[a];head[a]=top++;
}
int main()
{int A,B;while(cin>>n>>m){inti();int num=n;for(int i=0;i<m;i++){cin>>l[i]>>ch[i]>>r[i];if(ch[i]=='='){A=find(l[i]);B=find(r[i]);if(A!=B)aa[B]=A,num--;}}int flag=0;for(int i=0;i<m;i++){if(ch[i]=='=')continue;A=find(l[i]);B=find(r[i]);if(ch[i]=='>'){add(A,B);rudu[B]++;}if(ch[i]=='<'){add(B,A);rudu[A]++;}}queue<int> q;for(int i=0;i<n;i++)if(rudu[i]==0&&i==find(i))q.push(i);while(!q.empty()){if(q.size()>1)flag=1;num--;int t=q.front();q.pop();for(int i=head[t];i!=-1;i=bian[i].next)if(--rudu[bian[i].to]==0)q.push(bian[i].to);}if(num>0)cout<<"CONFLICT"<<endl;else if(flag)cout<<"UNCERTAIN"<<endl;else cout<<"OK"<<endl;}return 0;
}
转载于:https://www.cnblogs.com/SparkPhoneix/p/9413992.html
HDU-1811 Rank of 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)Total ...
- hdu 1811 Rank of Tetris (并查集+拓扑排序)
Problem - 1811 感觉这题的并查集以及拓扑排序并不难,但是做题的时候必须理解到矛盾(CONFLICT)与不确定(UNCERTAIN)直接的优先关系. 做这题的时候,构图什么的很简单,就是没 ...
- HDU - 1811 Rank of Tetris 并查集 + 拓扑序 +me
link 题意: 首先看到排名自然想到拓扑序,但是存在等于的情况,这就启发我们把等于的情况缩成一个点,让后在缩点后的图中进行拓扑即可. 对于不合法的情况当然是拓扑序没有遍历到应该遍历的点,所以只需要检 ...
- HDOJ 1811 Rank of Tetris
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 1760 A New Tetris Game(搜索博弈)
题目链接:hdu 1760 A New Tetris Game 题意: 给你一个矩阵,0表示可以放格子,现在给你2*2的格子,lele先放,问是否能赢. 题解: 爆搜.具体看代码 1 #include ...
- HDU1811 Rank of Tetris【拓扑排序+并查集】
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 『杭电1811』Rank of Tetris
Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子: ...
- hdu 1718 Rank
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1718 Rank Description Jackson wants to know his rank ...
最新文章
- 绘制多边形_XDGE_RayMarchine 1- 利用Frag Shader绘制图形
- Hadoop伪分布式环境搭建
- dsp广告和信息流广告区别_一文搞懂DSP-蘑菇街DSP广告实践
- java对象赋值给另一个对象_java面向对象编程
- 奥斯汀大学计算机专业怎么样,美国德州大学奥斯汀分校与加拿大ubc大学电子计算机专业哪个好...
- vue.js常用命令
- 【Java】命令行生成JavaDoc文档
- [UE4] Component BluePrint 组合 代替 BluePrint 继承 实现 ECS 结构
- 在verp设置parent和child关系时,child object没有随着parent object变化的情况
- 腾讯开源ML-Images,超越谷歌成业内最大多标签图像数据集
- JAVA 蔡羽 基础知识漫谈
- x86架构PC机系统总线概述
- 超声波测距原理、代码实现
- ntp服务restrict_Linux配置ntp时间服务器(全)
- java读加密excel,JAVA读取加密的Excel文件
- 【CF487E】Tourists
- widows 下git记住账号密码
- WebView打开第三方APP
- 如何在Windows server 2012中设置文件夹共享和访问
- Mysql为何不推荐写多表SQL