题意:关于Rating的信息。这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rating高于B,等于B,小于B。根据这些信息是否能够确定出这个高手榜,是的话就输出"OK"。否则就请你判断出错的原因,到底是因为信息不完全(输出"UNCERTAIN"),还是因为这些信息中包含冲突(输出"CONFLICT")。注意,如果信息中同时包含冲突且信息不完全,就输出"CONFLICT"。

思路:拓扑排序  A > B 就在图中画一条A-->B的有向边整体画完后找到入度为0的点他一定是榜单的第一,如果入度为0的点有多个说明榜单不完整,然后将和他有联系的点入度-1,再找入度为0的点知道再也找不到为止,这是判断点是否用完,用完了说明榜单完整,没用完说明有环,有冲突。但是题目中有A = B 这种数据,所以要用到并查集,将相等的点合并为一个集合,然后所有的操作都有父亲节点完成

如 A = B, A > C, C > B;因为A = B 所以并查集合并,A为父亲,A > C 建立有向边,C > B 将B节点的父亲A代替B,C的父亲还是C, 这样C > A 冲突了

操作的都是父亲节点。其他同上

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<queue>
using namespace std; struct node
{
int father;
}node[10005];
int num[10005];
int sum = 0;
void Make_set(int n)
{
int i;
for(i = 0; i < n; i++)
{
node[i].father = i;
num[i] = 0;
}
} int Find_set(int x)
{
if(x != node[x].father)
{
node[x].father = Find_set(node[x].father);
}
return node[x].father;
} bool Union(int a,int b)
{
int x = Find_set(a);
int y = Find_set(b); if(x == y)
return 0;
else
{
node[y].father = x;
}
return 1;
} void topsort(vector<int> v[],int n)
{
queue<int> q;
int i;
for(i = 0;i < n; i++)
{
if(num[i] == 0 && Find_set(i) == i)
q.push(i); } int flag = 0;
while(!q.empty())
{
if(q.size() > 1)
{
flag = 1;
}
int i;
int t = q.front();
q.pop();sum--;
for(i = 0; i < v[t].size(); i++)
{
num[v[t][i]]--;
if(!num[v[t][i]])
q.push(v[t][i]);
}
} if(sum > 0)
printf("CONFLICT\n");
else if(flag)
printf("UNCERTAIN\n");
else
printf("OK\n");
} int main()
{
int n,m;
while(scanf("%d%d",&n,&m) != EOF)
{
sum = n;
Make_set(n);
vector<int> v[10005];
int i,a[10005],b[10005];
char c[10005];
for(i = 0; i < m; i++)
{
scanf("%d %c %d",&a[i],&c[i],&b[i]);
if(c[i] == '=')
{
if(Union(a[i],b[i]))
sum--;
}
}
for(i = 0; i < m; i++)
{
if(c[i] != '=')
{
int x = Find_set(a[i]);
int y = Find_set(b[i]);
if(c[i] == '>')
{
v[x].push_back(y);
num[y]++;
}
else
{
v[y].push_back(x);
num[x]++;
}
}
}
topsort(v,n);
}
return 0;
}

Rank of Tetris(hdu1811拓扑排序+并查集)的更多相关文章

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

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

  2. HDU 1811 Rank of Tetris 【拓扑排序 + 并查集】

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

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

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

  4. hdu 1811 Rank of Tetris(拓扑,并查集)

    题意:略 分析:排序先按rating,若相同,则按rp.考虑到每个人的rp均不同,所以rating相同的人必然可以排序.那么只需要考虑rating不同的集合了.  大小关系可以用有向边表示,而大小关系 ...

  5. hdu1811 拓扑排序+并查集缩点

    /*给定两个点之间的三种关系 = < >如果是=就将两点放到同一个集合里进行缩点 离线处理所有关系,先用并查集将等于关系缩成一个点 */ #include<bits/stdc++.h ...

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

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

  7. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  8. hdu1811 Rank of Tetris 拓扑排序+并查集

    这道题是拓扑排序和并查集的综合运用. 由于排行榜是一种从高到低的排序.所以在拓扑排序的时候,如果有一次加入的入度为零的点数大于1,就有变得不确定了(UNCERTAIN). 由于只有一棵树,当树的数量大 ...

  9. hdu 1811 Rank of Tetris - 拓扑排序 - 并查集

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

随机推荐

  1. 记一次SSH登陆失败问题的定位

    创建用户之后,使用ssh协议登陆提示失败. useradd -d /home/hdp -m hdp -g dba -s /bin/bash 通过命令 ssh -v hdp@127.0.0.1 登陆,查 ...

  2. 8.11-8.16:usaco

    summary:57 bzoj1741:裸二分图最大匹配 #include<cstdio> #include<cstring> #include<iostream> ...

  3. [转] 字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽

    字符串模式匹配算法——BM.Horspool.Sunday.KMP.KR.AC算法一网打尽 转载自:http://dsqiu.iteye.com/blog/1700312 本文内容框架: §1 Boy ...

  4. [swustoj 1097] 2014

    2014(1097) 问题描述 今年是2014年,所以小明喜欢2014的每一位数字(即:2,0,1,4),小明想知道在区间[l,r](包括l和r)中有多少个数中含有这4个数字(数字无前缀零). 输入 ...

  5. ClassLoader工作机制

    阅读目录 一.ClassLoader概念 二.JVM平台提供三层classLoader 三.JVM加载class文件到内存有两种方式 四.ClassLoader加载类的过程 五.自定义类加载器 六.实 ...

  6. 在MFC[转载]在MFC状态栏显示时间 状态栏显示时间

    原文:在MFC状态栏显示时间,谢小哈皮儿 c/c++ vc 在mfc状态栏显示时间,在VC的控件中有个Status bar可以在窗体状态栏中添加日期和时间.其实通过简单的代码,你就能创建一个有时钟显示 ...

  7. UVA 11183 Teen Girl Squad 最小树形图

    最小树形图模板题 #include <iostream> #include <algorithm> #include <cstdio> #include <c ...

  8. Jenkin+TestNG进行自动化测试执行

    1.登陆jenkins'后,主页面有一个jenkins管理选项,进入该模块,对插件,系统进行配置.(安装一个extend choice parameter插件) 2.点击new item新建一个项目, ...

  9. Excel2010: Excel使用小技巧(不断更新)

    目录 1. 如何设置定时保存2. 调出“开发工具”功能区3. 在Excel单元格中输入对号和错号4. 设置单元格自动换行5. 向Excel中导入.txt文件6. 如何批量删除超链接7. 如何冻结窗格8 ...

  10. Tomcat普通用户部署教程(生产服务器)

    1.环境准备 JDK安装 解压     tar xf tomcat-xx.tar.gz -C /data/soft     cd /data/soft 重命名     mv tomcat-xx tom ...