Rank of Tetris

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4031    Accepted Submission(s): 1133

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

思路:

此题花了我好长时间,一开始以为rating相同的点就直接比较rp然后建图,后来想想不对,因为这样发现不了冲突。后来一想对于rating相同的点可以不用排序,因为对于这些点,他们的rp必然不相同,也就是说在这些点的内部必然存在唯一的且合理的排序,因此只需将要将这些点合并成一个点即可,需要用到并查集的知识。

把所有点按上述方法处理后就会得到一些点(暂且称为“有效点”),对于这些有效点再进行拓扑排序即可。

冲突情形:到最后存在环,或者出现a > b,b > c 且 c >a;

不确定情形:同一层中不止一个点入度为0;

确定情形:除以上两种情形;

AC代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. typedef struct
  4. {
  5. int to;
  6. int next;
  7. }EdgeNode;
  8. int cnt;
  9. char str[];
  10. EdgeNode Edge[];
  11. int father[],depth[];
  12. int L[],M[],R[];
  13. int head[],indegree[];
  14. int vis[],node[],temp[];
  15. void init(int n)
  16. {
  17. int i;
  18. cnt = ;
  19. memset(vis,,sizeof(vis));
  20. memset(head,-,sizeof(head));
  21. memset(indegree,,sizeof(indegree));
  22. for(i = ;i < n;i ++)
  23. {
  24. father[i] = i;
  25. depth[i] = ;
  26. }
  27. }
  28.  
  29. int find(int x)
  30. {
  31. if(x == father[x])
  32. return x;
  33. return father[x] = find(father[x]);
  34. }
  35.  
  36. void uint(int x,int y)
  37. {
  38. x = find(x);
  39. y = find(y);
  40. if(x == y)
  41. return ;
  42. if(depth[x] < depth[y])
  43. father[x] = y;
  44. else
  45. {
  46. if(depth[x] > depth[y])
  47. father[y] = x;
  48. else
  49. {
  50. father[x] = y;
  51. depth[y]++;
  52. }
  53. }
  54. return ;
  55. }
  56.  
  57. void add_edge(int n,int m)
  58. {
  59. Edge[cnt].to = m;
  60. Edge[cnt].next = head[n];
  61. head[n] = cnt++;
  62. }
  63.  
  64. int main(void)
  65. {
  66. int a,b,n,m,i,j,k;
  67. int sum,flag_U,flag_C;
  68. while(~scanf("%d %d",&n,&m))
  69. {
  70. init(n);
  71. flag_U = flag_C = ;
  72. for(i = ;i <= m;i ++)
  73. {
  74. scanf("%d %c %d",&L[i],&M[i],&R[i]);
  75. if(M[i] == '=')
  76. {
  77. uint(L[i],R[i]);
  78. }
  79. }
  80. for(i = ;i <= m;i ++)
  81. {
  82. if(M[i] == '=')
  83. continue ;
  84. a = find(L[i]);
  85. b = find(R[i]);
  86. if(a == b)
  87. {
  88. flag_C = ;
  89. break ;
  90. }
  91. else
  92. {
  93. if(M[i] == '>')
  94. {
  95. add_edge(b+,a+);
  96. indegree[a+]++;
  97. }
  98. else
  99. {
  100. add_edge(a+,b+);
  101. indegree[b+]++;
  102. }
  103. }
  104. }
  105. for(i = ;i <= n;i ++)
  106. {
  107. sum = ;
  108. for(j = ;j <= n;j ++)
  109. {
  110. if(indegree[j] == && vis[j] == && father[j-] == j-)
  111. temp[sum++] = j;
  112. }
  113. if(sum > )
  114. flag_U = ;
  115. for(j = ;j < sum;j ++)
  116. {
  117. vis[temp[j]] = ;
  118. for(k = head[temp[j]];k != -;k = Edge[k].next)
  119. {
  120. if(!vis[Edge[k].to])
  121. indegree[Edge[k].to]--;
  122. }
  123. }
  124. }
  125. for(i = ;i <= n;i ++)
  126. {
  127. if(indegree[i] && father[i-] == i-)
  128. {
  129. flag_C = ;
  130. break ;
  131. }
  132. }
  133. if(!(flag_C+flag_U))
  134. printf("OK\n");
  135. if(flag_C)
  136. printf("CONFLICT\n");
  137. if(flag_U && !flag_C)
  138. printf("UNCERTAIN\n");
  139. }
  140. return ;
  141. }

Rank of Tetris HDU--1881的更多相关文章

  1. Day4 - J - Rank of Tetris HDU - 1811

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

  2. ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线

    hdu 1811 Rank of Tetris Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

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

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

  4. HDU 1811:Rank of Tetris(并查集+拓扑排序)

    http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description   自从Lele开发了Rating系 ...

  5. HDU 1811 Rank of Tetris(拓扑排序+并查集)

    题目链接: 传送门 Rank of Tetris Time Limit: 1000MS     Memory Limit: 32768 K Description 自从Lele开发了Rating系统, ...

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

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

  7. HDU 1811 Rank of Tetris 拓补排序+并查集

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

  8. HDU 1811 Rank of Tetris(并查集+拓扑排序 非常经典)

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

  9. hdu 1811 Rank of Tetris (拓扑 & 并查集)

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

  10. BNUOJ 5966 Rank of Tetris

    Rank of Tetris Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...

随机推荐

  1. [USACO1.2.2]方块转换 Transformations

    P1205 [USACO1.2]方块转换 Transformations 标签 搜索/枚举 USACO 题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方 ...

  2. Hibernate的检索策略

    hibernate 的中的session依照load()和get()按照参数的制定OID(ObjctID)去加载一个持久化对象.另外Query.list()方法则按照HQL语句去加载持久化的对象. 以 ...

  3. [翻译]ASP.NET Web API 2入门

    原文:Getting Started with ASP.NET Web API 2 Step 1:新建一个Empty的Web API Project. Step 2:添加一个Model: public ...

  4. nginx方面的书籍资料链接

    http://tengine.taobao.org/book/ http://blog.sina.com.cn/s/articlelist_1929617884_0_1.html http://blo ...

  5. c语言"a<b<c"条件值的判定

    示例代码: #include <stdio.h> int main() { , b = , c = ; ; while (a<b<c) { t = a; a = b; b = ...

  6. php学习,一个简单的Calendar(1)

    材料取之深入PHP与JQuery开发,这本书实际上就是讲述一个活动日程表. 此文章适合从其它语言(如java,C++,python等)转到php,没有系统学习php,或者是php初学者,已经对程序有较 ...

  7. C#XML创建与节点对象引用

    我们在创建xml过程中会遇到不同的级别有相同节点的情况.如下面的xml: <?xml version="1.0" encoding="GBK"> & ...

  8. 给destoon商城的列表中和首页添加购物车功能

    如何给destoon商城的列表中和首页添加购物车功能? 目前加入购物车的功能只存在商城的详细页面里,有时候我们需要批量购买的时候,希望在列表页就能够使用这个加入购物车的功能. 修改步骤见下: 例如在商 ...

  9. 学习PHP爬虫--《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》

    <Webbots.Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)> 译者序 前言 第一部分 基础概念和技术 第1章 本书主要内容3 1.1 发现互联网的真 ...

  10. 【资料目录收藏】.NET开发必看资料53个 经典源码77个

    简单描述:为大家整理了下载中心.net资料,都是比较热的,好评率比较高的,做了一个可收藏的下载目录,希望大家喜欢~ 基于.net构架的留言板项目大全源码 http://down.51cto.com/z ...