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 12549 机器人警卫(最小点覆盖)
https://vjudge.net/problem/UVA-12549 题意: 在一个Y行X列的网格里有空地(.),重要位置(*)和障碍物(#),用最少的机器人看守所有重要位置,每个机器人要放在一个 ...
- python 行列式计算
N= #声明2x2的数组arr并将所有元素赋值为 None arr=[[None] * N for row in range(N)] print('|a1 b1|') print('|a2 b2|') ...
- Tp5,Service使用
C层,操控数据库,并处理页面数据展示. M层,纯粹的操作自己所对应的数据库. Service层,可以通用的处理一些逻辑计算,也可以将复杂的数据表处理整合到一起,也可以将复杂的业务逻辑整合到一起. 创建 ...
- angular-cli 文档
Angular/angular-cli 原文来自:https://github.com/angular/angular-cli Angular/angular-cli 原文来自:https://git ...
- Java IO流-字节流
2017-11-05 17:48:17 Java中的IO流按数据类型分类分为两种,一是字节流,二是字符流.字符流的出现是为了简化文本数据的读入和写出操作. 如果操作的文件是文本文件,那么使用字符流会大 ...
- Java Spring-JdbcTemplate
2017-11-10 22:55:45 Spring 对持久层技术支持 : JDBC : org.springframework.jdbc.core.JdbcTemplate Hibernate3.0 ...
- mybatis 环境搭建和基本说明
mybatis介绍就不多提了,直接步入正题. 先准备好eclipse和MySQL,然后先看一下目录结构 文件和类很少,所以mybatis的搭建是非常简单的,如搭建中遇到问题可以先参考文档最后一部分的综 ...
- poj1459网络流之多源点最大流
这题想了好久,一直认为应该bfs更新后求最小值把发电站最大发电加进去,但是又发现这样求增广路的时候会导致用户更新出错, 加源点和汇点也考虑到了,没想到居然发电量就是超级源到源点的v,居然这么简单@.@ ...
- 给 C# Expression Evaluator 增加中文变量名支持
由于一些特殊的原因,我的Expression里面需要支持中文变量名,但是C# Expression Evaluator会提示错误,在他的HelperMethods.IsAlpha()里面加上这么一段就 ...
- 是用TOP关键字对COUNT性能优化
在对大数据量进行检索或者分页的时候需要计算命中记录数大小,一般情况下我们可以直接COUNT得到结果,但是当结果集很大的时候(比如1万以上)具体结果值已经不重要了.没有人真的翻阅1万条记录,比如百度,你 ...