解题思路:

拓扑排序的两个性质:

①如果一次入队入度为零的点大于1则说明拓扑排序序列不唯一
②如果排序的总个数小于给定的个数,则说明存在回路
可以先把"="的两个数用并查集放在一个集合里,这样就只剩下">"和"<"了,可以用拓扑排序解决了。
不知道为什么TLE了。。待解决
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;const int maxn = 10005;
int n,m,cnt,fa[maxn],in[maxn];
int que[maxn],head,tail;
vector<int> G[maxn];void init()
{for(int i = 0; i <= n; i++)fa[i] = i;memset(in,0,sizeof(in));cnt = n;head = tail = 0;
}int find(int x)
{if(fa[x] == x) return x;return fa[x] = find(fa[x]);
}void Union(int x,int y)
{int fx = find(x);int fy = find(y);if(fx != fy){fa[fy] = fx;cnt--;}
}int main()
{char str[2];int a,b;while(scanf("%d%d",&n,&m)!=EOF){bool f1 = false,f2 = false;init();for(int i = 1; i <= n; i++){scanf("%d %s %d",&a,str,&b);if(str[0] == '=')Union(a,b);else if(str[0] == '>'){int fa = find(a);int fb = find(b);if(fa == fb){f1 = true;continue;}in[fb]++;G[fa].push_back(fb);}else{int fa = find(a);int fb = find(b);if(fa == fb){f1 = true;continue;}in[fa]++;G[fb].push_back(fa);}}for(int i = 0; i < n; i++)if(in[i] == 0 && find(i) == i)que[tail++] = i;while(head < tail){if(tail - head > 1) f2 = true;int t = que[head++];cnt--;for(int i = 0; i < G[t].size(); i++){in[G[t][i]]--;if(in[G[t][i]] == 0)que[tail++] = G[t][i];}}if(cnt > 0 || f1 == true)printf("CONFLICT\n");else if(f2 == true)printf("UNCERTAIN\n");else printf("OK\n");}return 0;
}

hdu 1811(拓扑排序+并查集)相关推荐

  1. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  2. Leetcode 1436旅行终点站 拓扑排序 并查集与队列

    题目介绍 题目难度: easy 给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 ...

  3. HDU1811 Rank of Tetris【拓扑排序+并查集】

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

  4. CodeForces - 1463E Plan of Lectures(拓扑排序+并查集缩点)

    题目链接:点击查看 题目大意:给出一棵有根树,树边都是有向边,再给出 kkk 个关系 (x,y)( x , y )(x,y),其意义是访问完点 xxx 后需要立即访问点 yyy,问是否存在一种合适的拓 ...

  5. HDU 4857 拓扑排序 优先队列

    n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...

  6. LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一 ...

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

    1 /* 2 题意:这些信息可能有三种情况,分别是"A > B","A = B","A < B",分别表示A的Rating高于B ...

  8. HDU 2473 Junk-Mail Filter(并查集的删除操作)

    题目地址:HDU 2473 这题曾经碰到过,没做出来. .如今又做了做,还是没做出来. ... 这题涉及到并查集的删除操作.想到了设一个虚节点,可是我把虚节点设为了要删除的点的父节点.一直是栈溢出,目 ...

  9. LeetCode 1135. 最低成本联通所有城市(最小生成树+排序+并查集)

    文章目录 1. 题目 2. 解题 1. Kruskal 2. prim 1. 题目 想象一下你是个城市基建规划者,地图上有 N 座城市,它们按以 1 到 N 的次序编号. 给你一些可连接的选项 con ...

最新文章

  1. 给博客增加了一个主题Nautica02Liquid
  2. oracle安装时ins-32031,安装oracle数据库时的报错处理[INS-35172]
  3. 【Kaidi安装问题】install_mkl.sh报错,没有数字签名
  4. 近期必读的5篇AI顶会CVPR 2020 GNN (图神经网络) 相关论文
  5. Docker镜像仓库清理的探索之路
  6. Moderate Modular Mode %,取模运算性质,数轴,思维
  7. java ceilingentry_java.util.TreeMap.ceilingKey()
  8. “噪声对比估计”杂谈:曲径通幽之妙
  9. Mac OS X下64位汇编与Linux下64位汇编的一些不同
  10. 【bfs】Replication G(P7151)
  11. 在MFC程序中增加控制台窗口
  12. 求二进制数中1的个数(转)
  13. JZOJ 3517. 空间航行
  14. This is probably because there is no OLE editor registered against the type of file you were trying
  15. 易智瑞大赛——地图故事组参赛经验
  16. 凯利KAC交流控制器调试方案
  17. 解决request-html chromium下载失败原因
  18. 上周刚号召加班,这周立马双休,董明珠把互联网玩明白了……
  19. 解决“ Error L6218E Undefined symbol enet_delay (referred from xxxx.o)”问题
  20. 雨量传感器测试(大众凌渡高尔夫7雨量传感器)

热门文章

  1. CentOS中设置ip地址等信息
  2. oracle什么时候需要commit
  3. 前端学PHP之PHP操作memcache
  4. 全文检索引擎Solr系列——Solr核心概念、配置文件
  5. openssl创建CA、申请证书及其给web服务颁发证书
  6. 德国精品软件 Steganos Safe 数据加密软件
  7. 新浪微博Python客户端接口OAuth2
  8. girton college things locations
  9. 纬度和日照时长的关系
  10. what to do preparing for phd