Rank of Tetris
Rank of Tetris |
| Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
| Total Submission(s): 256 Accepted Submission(s): 110 |
|
Problem Description
自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球。
为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜,定时更新,名堂要比福布斯富豪榜还响。关于如何排名,这个不用说都知道是根据Rating从高到低来排,如果两个人具有相同的Rating,那就按这几个人的RP从高到低来排。 终于,Lele要开始行动了,对N个人进行排名。为了方便起见,每个人都已经被编号,分别从0到N-1,并且编号越大,RP就越高。 现在Lele并不是让你来帮他制作这个高手榜,他只是想知道,根据这些信息是否能够确定出这个高手榜,是的话就输出"OK"。否则就请你判断出错的原因,到底是因为信息不完全(输出"UNCERTAIN"),还是因为这些信息中包含冲突(输出"CONFLICT")。 |
|
Input
本题目包含多组测试,请处理到文件结束。
每组测试第一行包含两个整数N,M(0<=N<=10000,0<=M<=20000),分别表示要排名的人数以及得到的关系数。 接下来有M行,分别表示这些关系 |
|
Output
对于每组测试,在一行里按题目要求输出
|
|
Sample Input
3 3 |
|
Sample Output
OK |
|
Author
linle
|
|
Source
HDOJ 2007 Summer Exercise(2)
|
|
Recommend
lcy
|
/*
yy了一天这个题的各种想法,最后看了题解才知道是拓扑排序,又看了一下拓扑排序; 拓扑排序:将一个图入度为零的点加入队列,如果多余一个,那么这个图不是树,很可能是森林,如果只有一个节点,
就进行删根操作,每删一个根就把这个根输出,删根时也将与之关联的边删掉
*/
#include<bits/stdc++.h>
#define N 20005
using namespace std;
vector<int >v[N];//构建邻接矩阵
int bin[N];//用于构建并查集
int in[N];//用于记录每个节点的入度
int n,m,sum;//节点数
char op[N][];
void inti()
{
sum=n;
for(int i=;i<=n;i++)
{
bin[i]=i;
v[i].clear();
in[i]=;
}
}
int findx(int x)
{
while(x!=bin[x])
x=bin[x];
return x;
}
int judge(int x,int y)
{
int fx=findx(x);
int fy=findx(y);
if(fx!=fy)
{
bin[fx]=fy;
return ;
}
return ;
}
void topoSort()
{
queue<int >q;
int i;
for(i=;i<n;i++)
if(in[i]==&&findx(i)==i)//入度为零的点(一棵树的根节点)
q.push(i);
int flag=;
while(!q.empty())
{
if(q.size()>)//多于一个根节点就说明信息不完整
flag=;
int now=q.front();
q.pop();
sum--;
for(i=;i<v[now].size();i++)
if(--in[v[now][i]]==)//删根
q.push(v[now][i]);//删根之后的子树根节点
}
if(sum>)
{
puts("CONFLICT");
}
else if(flag==)
{
puts("UNCERTAIN");
}
else
{
puts("OK");
}
return;
}
int x[N],y[N];
int main()
{
//freopen("C:\\Users\\acer\\Desktop\\in.txt","r",stdin);
//int c=0;
while(scanf("%d%d",&n,&m)!=EOF)
{
//if(c++==2)
// break;
//cout<<"n="<<n<<" m="<<m<<endl;
inti();
for(int i=;i<m;i++)
{
scanf("%d%s%d",&x[i],op[i],&y[i]);
//cout<<x[i]<<" "<<op[i]<<" "<<y[i]<<endl;
if(op[i][]=='=')
{
if(judge(x[i],y[i]))//两点不属于同一并查集
{
sum--;
}
}
getchar();
}
//cout<<endl;
//break;
for(int i=;i<m;i++)
{
if(op[i][]!='=')
{
int fx=findx(x[i]);
int fy=findx(y[i]);
if(op[i][]=='>')
{
v[fx].push_back(fy);
in[fy]++;
}
else
{
v[fy].push_back(fx);
in[fx]++;
}
} }
topoSort();
}
return ;
}
Rank of Tetris的更多相关文章
- HDU 1811 Rank of Tetris(拓扑排序+并查集)
题目链接: 传送门 Rank of Tetris Time Limit: 1000MS Memory Limit: 32768 K Description 自从Lele开发了Rating系统, ...
- 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 (并查集+拓扑排序)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Rank of Tetris HDU--1881
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 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 ...
- hdu 1811 Rank of Tetris (拓扑 & 并查集)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- BNUOJ 5966 Rank of Tetris
Rank of Tetris Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...
随机推荐
- SQLServer 自动循环归档分区数据脚本
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/表分区 概述 在很多业务场景下我们需要对一些记录量比较大的表进行分区,同时为了保证性能需要将一些旧的数据进行归档.在分区表很多的情 ...
- JSON和java对象的互转
先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功. 上述这种方法太麻烦了. ...
- 第5章 不要让线程成为脱缰的野马(Keeping your Threads on Leash) ---干净的终止一个线程
干净的终止一个线程 我曾经在第2章产生一个后台线程,用以输出一张屏幕外的 bitmap 图.我们必须解决的一个最复杂的问题就是,如果用户企图结束程序,而这张bitmap 图尚未完成,怎么办?第2章的 ...
- kbhit()
kbhit() 非阻塞的响应键盘输入时间 C++函数 功能和返回值:检查是否有键盘输入 ,有返回非0 ,无返回0 int khbit(void) 头文件: #include<conio.h& ...
- Angular JS的正确打开姿势——简单实用(下)
前 言 絮叨絮叨 继上篇内容,本篇继续讲一下这款优秀并且实用的前端插件AngularJS. 六. AngularJS中的HTTP 6.1先看看JQuery的Ajax写法 $ajax({ me ...
- MongoDB学习教程(2)-常用命令
1.MongoDB 创建数据库 use DATABASE_NAME,如果数据库不存在,则创建数据库,否则切换到指定数据库. > use test_0902 switched to db test ...
- 纯CSS3实现轮播图
前言 纯css3实现的轮播图效果,和JavaScript控制的相比,简单高效了很多,但是功能也更加单一,只有轮播不能手动切换. 用什么实现的呢?页面布局 + animation动画 HTML部分 &l ...
- Java 继承、抽象、接口
一.继承 1. 概述 继承是面向对象的重要特征之一,当多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那多个类中无需再定义这些属性和行为,只需继承那个单独的类即可. 单独的类称为父类或超 ...
- 调用js中文乱码
JS文件是GB2312编码的,如果需要js中的中文不出现乱码,在UTF-8编码中调用语句为: <script src="myjs001.js" charset="g ...
- zabbix基本操作
zabbix基本操作 ---- 2016年终总结 二 包括的内容: 添加主机 查看监控数据 添加监控项 创建触发器 创建模版 添加报警 添加媒介 添加主机 进入页面 点击Configuration(大 ...