并查集+拓扑排序。使用并查集解决a = b的情况。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std; #define MAXN 10005 typedef struct ArcNode {
int adjvex;
ArcNode *next;
} ArcNode; typedef struct VNode {
int count;
ArcNode *first;
} VNode; VNode nodes[MAXN];
int pre[MAXN], n;
int srca[MAXN<<],srcb[MAXN<<];
char op[MAXN<<];
bool flag; int find(int x) {
int r = x;
while (r != pre[r])
r = pre[r];
return r;
} void merge(int a, int b) {
int x = find(a);
int y = find(b);
pre[x] = y;
} void Insert(int x, int y) {
ArcNode *p = new ArcNode;
nodes[y].count++;
p->adjvex = y;
p->next = nodes[x].first;
nodes[x].first = p;
} int main() {
int m;
int i, j, x, y; while (scanf("%d %d",&n,&m) != EOF) {
for (i=; i<n; ++i) {
nodes[i].count = ;
nodes[i].first = NULL;
pre[i] = i;
}
for (i=; i<m; ++i) {
scanf("%d %c %d", &srca[i], &op[i], &srcb[i]);
if (op[i] == '=')
merge(srca[i], srcb[i]);
}
flag = false;
for (i=; i<m; ++i) {
if (op[i] == '=')
continue;
x = find(srca[i]);
y = find(srcb[i]);
if (x == y) {
flag = true;
break;
}
if (op[i] == '>')
Insert(x, y);
else
Insert(y, x);
}
if (flag) {
printf("CONFLICT\n");
continue;
}
queue<int> que;
int index;
ArcNode *p;
m = ;
for (i=; i<n; ++i) {
if (i==find(i)) {
++m;
if (nodes[i].count==)
que.push(i);
}
}
while (!que.empty()) {
if (que.size() > )
flag = true;
index = que.front();
que.pop();
p = nodes[index].first;
--m;
while (p != NULL) {
j = p->adjvex;
--nodes[j].count;
if (nodes[j].count == )
que.push(j);
p = p->next;
}
}
if (m)
printf("CONFLICT\n");
else if (flag)
printf("UNCERTAIN\n");
else
printf("OK\n");
} return ;
}

【HDOJ】1811 Rank of Tetris的更多相关文章

  1. 【HDOJ】1813 Escape from Tetris

    bfs预处理一点到边界的最小距离,IDA*求出可行方案.注意按字典序初始化dir数组.并且存在中间点全为1,边界含0的可能性(wa了很多次).此时不输出任何命令. /* 1813 */ #includ ...

  2. 【HDOJ】1760 A New Tetris Game

    博弈,主要是求SG值.终于做出点儿感觉. /* 1760 */ #include <cstdio> #include <cstring> #include <cstdli ...

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

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

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

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

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

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

  6. hdu 1811 Rank of Tetris (并查集+拓扑排序)

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

  7. HDU 1811 Rank of Tetris(并查集+拓扑排序 非常经典)

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

  8. hdu 1811 Rank of Tetris (拓扑 & 并查集)

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

  9. HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

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

随机推荐

  1. SCIP读书笔记(1)

    这书也算是必修吧,尤其是我这种非科班人员,还是应该抽时间尽量学习一下.大致翻过一遍,习题非常多,尽力吧. ##构造过程抽象 * 为了表述认知,每种语言都提供了三种机制:基本元素:组合方式:抽象方法. ...

  2. 如何快速学习bootstrap

    bootstrap中文网http://www.bootcss.com/解决了我所有使用bootstrap的问题,从0开始,下面的全部链接都是该网站的子链接.例子http://v3.bootcss.co ...

  3. 黑马程序员-IO(二)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 装饰设计模式: 当想要对已有对象进行功能增强时.可以定义类,将已经有的类传入,基于已经有的功能, ...

  4. asp.net <%%> <%#%><%=%><%@%><%$%>用法与区别

    1.<% %>用来绑定后台代码 如: < % for(int i=0;i<100;i++) { Reaponse.Write(i.ToString()); } %> 2. ...

  5. HTTP状态吗汇录

    页面Http状态查询工具说明 建议直接Ctrl+F来查找状态码 如果向您的服务器发出了某项请求要求显示您网站上的某个网页,那么,您的服务器会返回 HTTP 状态代码以响应该请求. 如果向您的服务器发出 ...

  6. 协程的作用 Python

    1.协程的含义和实现 协程是单进程单线程的超越函数的调度机制,它通过一定的调度手段进行调度. (Python使用generator机制,greenlet使用汇编控制对程序指向来实现). 2.协程有什么 ...

  7. 分享一个自己写的基于TP的关系模型(三)

    这段时间对模型做了升级和优化,并将版本更新到TP3.2. 下载 下载后请将目录放置TP的Library目录下 1.数据节点优化,原来的节点为模型的名称或者表名,现在更新为定义关系的方法名 public ...

  8. PHP 编译问题PEAR package PHP_Archive not installed的解决

    php 的编译时需要依赖pear package ,目前的问题错误"PEAR package PHP_Archive not installed",已经明显报出这个问题. 因此编译 ...

  9. 【随记】还原SQL Server数据库步骤

    情景:在一台机器上备份数据库,然后在另一台机器上还原数据库,可能会出现错误提示:System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 'XXX' 数据库不同. ...

  10. dotnet core 开发体验之Routing

    开始 回顾上一篇文章:dotnet core开发体验之开始MVC 里面体验了一把mvc,然后我们知道了aspnet mvc是靠Routing来驱动起来的,所以感觉需要研究一下Routing是什么鬼. ...