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又想了一个新点子:他 ...
随机推荐
- 一篇很好的讲解SIFT算法的文章
http://blog.csdn.net/zddblog/article/details/7521424
- FastDFS的配置、部署与API使用解读(2)以字节方式上传文件的客户端代码(转)
本文来自 诗商·柳惊鸿 Poechant CSDN博客,转载请注明源地址:FastDFS的配置.部署与API使用解读(2)上传文件到FastDFS分布式文件系统的客户端代码 在阅读本文之前,请您先通过 ...
- openwrt gstreamer实例学习笔记(七. gstreamer 缓冲区(Buffers)和事件(Events))
1)概述 管道的数据流由一组缓冲区和事件组成,缓冲区包括实际的管道数据,事件包括控制信息,如寻找信息和流的终止信号.所有这些数据流在运行的时候自动的流过管道. 2) 缓冲区(Buffers) 缓冲区包 ...
- const *char p和char const *p
const *char p和char const *p,const char*p的区别 char*const p——p必须初始化,且不能指向别处,即p是指针常量: char const*p——p指向的 ...
- 程序编写安全代码——sendto和recvfrom的大坑
近日帮一个兄弟查代码问题,再处理完一系列问题以后,发现程序某些时候工作还是不正常,甚至会崩溃.因为环境所限,不能使用gdb,所以我只能review他的代码.最终发现原来是sendto和recvfrom ...
- Messaging Patterns for Event-Driven Microservices
Messaging Patterns for Event-Driven Microservices https://content.pivotal.io/blog/messaging-patterns ...
- C标准库中atoi的一种可能的实现
为避免与标准库中的atoi产生歧义, 我将自己编写的函数命名为strToInt, 以下是示例代码 #include <stdio.h> int strToInt(const char *s ...
- JS简单正则得到字符串中特定的值
这里就直接看演示样例吧.演示样例的目的是为了获取 a 字符串中的 c02806015 <script language="javascript"> var a = '礼 ...
- [树套树]K大数查询
有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少.为了 ...
- bzoj3957: [WF2011]To Add or to Multiply
gay队牛逼! 我们可以强行拆一下柿子,最终得到的值会是m^k*x+m^k*u(k)*a+m^k-1*u(k-1)*a……m^0*u(0)*a 其中u表示后面有i个m的a有多少个 答案就是k+∑u 枚 ...