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 ...
随机推荐
- Create Hierarchical Tree To Control Records In Oracle Forms
Download Source Code Providing an example form for creating hierarchical trees in Oracle Forms to co ...
- CUBRID学习笔记 15 Lobs类型数据
BLOB: Binary large object CLOB: Character large object 一个二进制 一个字符类型 二进制的读取 CUBRIDCommand cmd = new C ...
- Codeforces Round #237 (Div. 2) B题模拟题
链接:http://codeforces.com/contest/404/problem/B B. Marathon time limit per test 1 second memory limit ...
- Codeforces Round #249 (Div. 2) A题
链接:http://codeforces.com/contest/435/problem/A A. Queue on Bus Stop time limit per test 1 second m ...
- mysql密码忘记或者不知道,怎么办?
运行cmd: 输入mysql回车,如果成功,将出现MySQL提示符 > 连接权限数据库>use mysql; (>是本来就有的提示符,别忘了最后的分号) 修改改密码:> upd ...
- hdu 4163 Stock Prices 水
#include<bits/stdc++.h> using namespace std; #define ll long long #define pi (4*atan(1.0)) #de ...
- iOS - Swift NSDate 时间
前言 NSDate public class NSDate : NSObject, NSCopying, NSSecureCoding NSDate 用来表示公历的 GMT 时间(格林威治时间).是独 ...
- [转载] tmux的使用tips
原文: http://tangosource.com/blog/a-tmux-crash-course-tips-and-tweaks/
- Android 点击文字实现跳转
在web页面中,有a标签的超链接实现跳转,同样在Android当中,用TextView控件来显示文字,实现它的事件来跳转. 核心代码如下: //以下代码写在onCreate()方法当中 textVie ...
- (一)SecureCRT连接虚拟机linux
最近在学习linux,在使用SecureCRT连接虚拟机linux时遇到了一些问题,现在总结一下. 1.首先要配置linux配置文件,修改静态IP地址以及掩码,保持与本地在同一网段.更改配置文件方法如 ...