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

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
比起一般的拓扑排序,多了一个等于的条件。但是如果用并查集将等于的多项归于一项就是裸的拓扑排序了
#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相关推荐

  1. HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  2. HDU 1811 Rank of Tetris

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. hdu 1811 Rank of Tetris (并查集+拓扑排序)

    Problem - 1811 感觉这题的并查集以及拓扑排序并不难,但是做题的时候必须理解到矛盾(CONFLICT)与不确定(UNCERTAIN)直接的优先关系. 做这题的时候,构图什么的很简单,就是没 ...

  4. HDU - 1811 Rank of Tetris 并查集 + 拓扑序 +me

    link 题意: 首先看到排名自然想到拓扑序,但是存在等于的情况,这就启发我们把等于的情况缩成一个点,让后在缩点后的图中进行拓扑即可. 对于不合法的情况当然是拓扑序没有遍历到应该遍历的点,所以只需要检 ...

  5. HDOJ 1811 Rank of Tetris

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  6. hdu 1760 A New Tetris Game(搜索博弈)

    题目链接:hdu 1760 A New Tetris Game 题意: 给你一个矩阵,0表示可以放格子,现在给你2*2的格子,lele先放,问是否能赢. 题解: 爆搜.具体看代码 1 #include ...

  7. HDU1811 Rank of Tetris【拓扑排序+并查集】

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. 『杭电1811』Rank of Tetris

    Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子: ...

  9. hdu 1718 Rank

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1718 Rank Description Jackson wants to know his rank ...

最新文章

  1. 绘制多边形_XDGE_RayMarchine 1- 利用Frag Shader绘制图形
  2. Hadoop伪分布式环境搭建
  3. dsp广告和信息流广告区别_一文搞懂DSP-蘑菇街DSP广告实践
  4. java对象赋值给另一个对象_java面向对象编程
  5. 奥斯汀大学计算机专业怎么样,美国德州大学奥斯汀分校与加拿大ubc大学电子计算机专业哪个好...
  6. vue.js常用命令
  7. 【Java】命令行生成JavaDoc文档
  8. [UE4] Component BluePrint 组合 代替 BluePrint 继承 实现 ECS 结构
  9. 在verp设置parent和child关系时,child object没有随着parent object变化的情况
  10. 腾讯开源ML-Images,超越谷歌成业内最大多标签图像数据集
  11. JAVA 蔡羽 基础知识漫谈
  12. x86架构PC机系统总线概述
  13. 超声波测距原理、代码实现
  14. ntp服务restrict_Linux配置ntp时间服务器(全)
  15. java读加密excel,JAVA读取加密的Excel文件
  16. 【CF487E】Tourists
  17. widows 下git记住账号密码
  18. WebView打开第三方APP
  19. 如何在Windows server 2012中设置文件夹共享和访问
  20. Mysql为何不推荐写多表SQL

热门文章

  1. ORACLE 使用函数返回表数据
  2. Android studio 设置主题
  3. Android Studio使用小技巧:提取方法代码片段
  4. android 访问https服务器
  5. 【Android】Apk安装和删除
  6. QTP中对用户自定义环境变量的XML操作的几个函数
  7. 个人作业——week3
  8. silverlight mediaElement 动态添加source
  9. WPF自定义控件的自定义属性绑定后不更新问题
  10. RTP协议全解析(H264码流和PS流)(转)