HDU-5222 Exploration(拓扑排序)
一、题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=5222
二、题意
给一个无向边+有向边的混合图,其中每条边只能使用一次,问图中是否存在环。
三、思路
1、必备知识点:图中判断是否存在环
- 无向图
- 有向图
- 无向边+有向边的混合图
#pragma comment(linker, "/STACK:102400000,102400000") #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<set> #include<vector> #include<queue> using namespace std; #define MAXN 1000100 typedef long long LL; typedef struct{ int par[MAXN], rk[MAXN]; void init(){ ;i < MAXN;++i)par[i] = i, rk[i] = ; } int root(int x){ return x == par[x] ? x : par[x] = root(par[x]); } void unite(int u, int v){ int x = root(u), y = root(v); if(x == y)return; if(rk[x] < rk[y])par[x] = y; else{ par[y] = x; if(rk[x] == rk[y])rk[y]++; } } bool same(int u, int v){ return root(u) == root(v); } }UniFinder; int N, M1, M2; vector<int> g[MAXN]; int deg[MAXN]; template<class T> inline void read(T& x){ char t; bool sign = false; ')); if(t == '-')sign = true, t =getchar(); x = t - '; + t - '; if(sign)x = -x; } priority_queue<int, vector<int>, greater<int> > que; bool topo_sort(){ while(!que.empty())que.pop(); ;i <= N;++i){ )que.push(i); } int rest = N; while(!que.empty()){ int top = que.top(); que.pop(); rest--; , sz = g[top].size();i < sz;++i){ int to = g[top][i]; deg[to]--; )que.push(to); } } ; } UniFinder uf; int main(){ #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif int T, u, v; scanf("%d", &T); while(T--){ ;i < MAXN;++i)g[i].clear(); memset(deg, , sizeof(deg)); uf.init(); bool ans = false; scanf("%d%d%d", &N, &M1, &M2); ;i < M1;++i){ read(u), read(v); if(uf.same(u, v))ans = true; uf.unite(u, v); } ;i < M2;++i){ read(u), read(v); u = uf.root(u), v = uf.root(v); if(u == v)ans = true; if(ans)continue; g[u].push_back(v), deg[v]++; } if(ans)puts("YES"); else printf("%s\n", topo_sort() ? "YES" : "NO"); } ; }
HDU-5222 Exploration(拓扑排序)的更多相关文章
- HDU.2647 Reward(拓扑排序 TopSort)
HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...
- HDU 5222 ——Exploration——————【并查集+拓扑排序判有向环】
Exploration Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- ACM: hdu 2647 Reward -拓扑排序
hdu 2647 Reward Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- HDU 2647 Reward (拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意是给你n点m条有向边,叶子点(出度为0)上的值为888,父亲点为888+1,依次计算... ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- hdu 4857 逃生 拓扑排序+PQ,剥层分析
pid=4857">hdu4857 逃生 题目是求拓扑排序,但不是依照字典序最小输出,而是要使较小的数排在最前面. 一開始的错误思路:给每一个点确定一个优先级(该点所能到达的最小的点) ...
- HDU 1285 经典拓扑排序入门题
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 2647 逆向拓扑排序
令每一个员工都有一个自己的等级level[i] , 员工等级越高,那么工资越高,为了使发的钱尽可能少,所以每一级只增加一单位的钱 输入a b表示a等级高于b,那么我们反向添加边,令b—>a那么i ...
- HDU 4917 Permutation 拓扑排序的计数
题意: 一个有n个数的排列,给你一些位置上数字的大小关系.求合法的排列有多少种. 思路: 数字的大小关系可以看做是一条有向边,这样以每个位置当点,就可以把整个排列当做一张有向图.而且题目保证有解,所以 ...
随机推荐
- UVa 12169 不爽的裁判
https://vjudge.net/problem/UVA-12169 题意: 输入T,x1,x2,x3,...,x2T-1,输出x2,x4,...,x2T. 递推公式为xi=(axi-1+b)mo ...
- codeforces 55 div2 C.Title 模拟
C. Title time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
- Java中代码点与代码单元(转)
摘要 本文介绍 Java 平台支持增补字符的方式.增补字符是 Unicode 标准中代码点超出 U+FFFF 的字符,因此它们无法在 Java 编程语言中描述为单个的 16 位实体(例如char数据类 ...
- windows java 环境变量配置
第一步 找到系统设置环境变量的位置(windows 10): 控制面板\系统和安全\系统 点击 ‘高级系统设置’ 就可以看到 “环境变量” 了 第二步 设置3个路径 1.path (配置JD ...
- 两个cookie的合并
这里为什么会想到这个问题呢? 1.我们在对一个商品下订单之前需要2个步骤,1---登录,2---加入购物车 2.那么我们到底是用哪一个cookie呢?实际测试的时候, a.发现只用了登录cookie, ...
- bzoj2049: [Sdoi2008]Cave 洞穴勘测 lct裸题
题意:三种操作一种摧毁一条边,一种链接一条边,一种查询两个点是否联通 题解:lct的link和cut即可 /********************************************** ...
- springboot 用mybatis-generator自动生成bean和dao
1.在pom.xml里添加maven插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifac ...
- maven打包资源文件(转)
原文链接:http://blog.csdn.net/u012849872/article/details/51035938 maven工程标准目录结构: src -main –bin ...
- UE4 游戏中csv配置文件使用
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/76549463 作者:ca ...
- [LOJ535]「LibreOJ Round #6」花火
loj description 给你一个排列\(h_i\),你需要交换任意两个位置上的数使得交换后排列的逆序对数最少. \(n \le 3\times 10^5\) sol 首先可以发现,如果交换两个 ...