hdu1811 Rank of Tetris 并查集+拓扑排序
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
struct node//边
{
int a, b;//顶点
char ch;//运算符
}c[];
vector<int>map[];//map数组存贮邻接表 (大佬都是这么开数组的)
int n, m, sum, in[], fa[];//in数组表示入度,fa[i]表示顶点i所在集合的根节点 int find(int x)//查找根节点
{
if (fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
} bool comb(int x, int y)//合并集合
{
x = find(x);
y = find(y);
if (x == y)
return false;
else
{
fa[y] = x;
return true;
}
} void init()//初始化
{
for (int i = ; i<n; i++)
fa[i] = i;
} void top_sort()//queue实现拓扑排序
{
queue<int>s;
int flag = ;
for (int i = ; i<n; i++)
{
//找到入度为零的切祖宗为自己的加入到队列中
if (in[i] == && fa[i] == i)
s.push(i);
}
while (!s.empty())
{
if (s.size() > )//即使发现信息不完整也要继续运行下去,因为如果信息同时不完整和冲突都是CONFLICT
flag = ;
int pos = s.front();
s.pop(), sum--; //记录下运行的次数
for (int i = ; i<map[pos].size(); i++)
{
in[map[pos][i]]--;
if (in[map[pos][i]] == )
s.push(map[pos][i]);
}
}
if (sum>) printf("CONFLICT\n"); //冲突,即有多个入度为零且祖宗为自己的出现
else if (flag) printf("UNCERTAIN\n");
else printf("OK\n");
} int main()
{
while (scanf("%d %d", &n, &m) != EOF)
{
sum = n;
init();
memset(map, , sizeof(map));
memset(in, , sizeof(in));
for (int i = ; i<m; i++)
{
scanf("%d %c %d", &c[i].a, &c[i].ch, &c[i].b);
//如果相等,就合并为同一个集合
if (c[i].ch == '=')
{
if (comb(c[i].a, c[i].b))
sum--;
}
}
for (int i = ; i<m; i++)
{
if (c[i].ch == '=')
continue;
int x = find(c[i].a);
int y = find(c[i].b);
if (c[i].ch == '>')
{
map[x].push_back(y);
in[y]++;
}
else
{
map[y].push_back(x);
in[x]++;
}
}
top_sort();
}
//system("pause");
return ;
}
hdu1811 Rank of Tetris 并查集+拓扑排序的更多相关文章
- hdu 1811 Rank of Tetris (并查集+拓扑排序)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 1811Rank of Tetris (并查集 + 拓扑排序)
/* 题意:这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rating高于B,等于B ...
- HDU 1811:Rank of Tetris(并查集+拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1811 Rank of Tetris Problem Description 自从Lele开发了Rating系 ...
- 并查集+拓扑排序 赛码 1009 Exploration
题目传送门 /* 题意:无向图和有向图的混合图判环: 官方题解:首先对于所有的无向边,我们使用并查集将两边的点并起来,若一条边未合并之前, 两端的点已经处于同一个集合了,那么说明必定存在可行的环(因为 ...
- 【并查集+拓扑排序】【HDU1811】【Rank of Tetris】
题意:给你3种关系 A=B,A>B,A<B 问是否排名方式唯一,或者存在矛盾 解 1.读入数据先处理 =号 用并查集的祖先作为代表元素,其他儿子节点都等于跟这个点重叠. 再读入 '< ...
- HDU 1811 Rank of Tetris(并查集+拓扑排序 非常经典)
Rank of Tetris Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- [HDOJ1811]Rank of Tetris(并查集、拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1811 求一堆数据的拓扑序. 处理:x>y就是x到y一条边,x<y就是y到x一条边.关键问题 ...
- HDU1811 并查集+拓扑排序
题目大意: 判断是否能根据给定的规则将这一串数字准确排序出来 我们用小的数指向大的数 对于相等的情况下,将二者合并到同一个并查集中,最后抽象出来的图上面的每一个点都应该代表并查集的标号 #includ ...
- HDU 1811(并查集+拓扑排序)题解
Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球.为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他 ...
随机推荐
- Serial attached SCSI
http://en.wikipedia.org/wiki/Serial_attached_SCSI Serial attached SCSI From Wikipedia, the free ency ...
- CPU维修技术
中央处理单元(Central Process Unit)简称CPU,是电脑的核心部件,负责处理和运算电脑内部所有数据.因其在电脑中的地位相当重要,所以一旦发生故障就会造成很严重的后果. [技术66]开 ...
- openwrt - squashfs-sysupgrade.bin 的生成过程
squashfs-sysupgrade.bin 生成过程图 路径变量 $(KERNEL_BUILD_DIR)="/home/sam/Projects/openwrt-mt7620n/buil ...
- openwrt gstreamer实例学习笔记(一.初始化gstreamer)
GStreamer 是一个非常强大而且通用的流媒体应用程序框架. GStreamer所具备的很多优点来源于其框架的模块化: GStreamer能够无缝的合并新的插件. 但是, 由于追求模块化和高效率, ...
- excel 创建数据有效性及背景颜色
需求:用excel做数据或者表格时经常需要在一列中给出固定的几个进行悬着,这是如果每次键盘输入降低工作效率.如果做成鼠标双击进行选择,则提高很多效率,比如需要给一列填写Pass或Failure时,具体 ...
- 基于ADB框架Robotium跨进程操作
转自:http://blog.csdn.net/qingchunjun/article/details/42580937 2015年2月3日更新: 有些朋友在用真机尝试本方法时,抛出了InputStr ...
- BZOJ 1042: [HAOI2008]硬币购物 容斥+背包
1042: [HAOI2008]硬币购物 Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请 ...
- UOJ #35. 后缀排序[后缀数组详细整理]
#35. 后缀排序 统计 描述 提交 自定义测试 这是一道模板题. 读入一个长度为 nn 的由小写英文字母组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符 ...
- 【bzoj3671】[Noi2014]随机数生成器
优先按照它说明的方法处理数组 然后为了让数列中尽可能多的出现小的数字 所以1是必须要出现的,这样才能使整个数列的排序后字典序最小. 我们思考,如果2也能在这个数列中那就最好不过了 但是2有可能不在这个 ...
- java sleep和wait的区别和联系
Thread.sleep不会改变锁的行为,如果当前线程拥有锁,那么当前线程sleep之后,该锁不会被释放. Thread.sleep和Object.wait都会暂停当前的线程,让出cpu.Thread ...