POJ2762 Going from u to v or from v to u(单连通 缩点)
判断图是否单连通,先用强连通分图处理,再拓扑排序,需注意:
符合要求的不一定是链
拓扑排序列结果唯一,即在队列中的元素始终只有一个
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
#include<utility>
#include<stack>
using namespace std;
typedef long long LL;
const int N = 1008, INF = 0x3F3F3F3F;
int dfn[N],id[N];
int lab,cnt;
stack <int> st;
int n, m;
int head[N], tot;
int indeg[N];
vector<int> g[N];
void init(){
memset(head, - 1,sizeof(head));
tot= 0;
} struct Edge{
int to, next;
}edge[20008]; void add(int u, int v){
edge[tot].to = v;
edge[tot].next = head[u];
head[u] = tot++;
} int dfs(int u){
int lowu=dfn[u]=++lab;
st.push(u);
for(int i = head[u];i!=-1;i=edge[i].next){
int v = edge[i].to;
if(!dfn[v]){
int lowv = dfs(v);
lowu = min(lowu, lowv);
}else if(!id[v]) {
lowu = min(lowu, dfn[v]);
}
}
if(lowu == dfn[u]){
cnt++;
while(1){
int x = st.top();
st.pop();
id[x] = cnt;
if(x == u) break;
}
}
return lowu;
}
int tarjan(){
for(int i=1;i<=n;i++) {
dfn[i] = id[i] = 0;
}
lab=cnt=0;
for(int i=1;i<=n;i++) {
if(!dfn[i]){
dfs(i);
}
}
return cnt;
} //符合要求的不一定是链
//拓扑排序列结果唯一,即在队列中的元素始终只有一个
bool topsort(int n){
queue<int > q;
int sum = 0;
for(int i = 1; i <= n; i++){
if(indeg[i] == 0){
q.push(i);
if(q.size() > 1){
return false;
}
}
}
while(!q.empty()){
int u = q.front();
q.pop();
sum++;
for(int i= 0; i < g[u].size(); i++){
int v = g[u][i];
indeg[v]--;
if(indeg[v] == 0){
q.push(v);
}
}
if(q.size() > 1){
return false;
}
}
if(sum != n){
return false;
}
return true;
}
int main(){
int t;
cin>>t;
while(t--){
init();
memset(indeg, 0, sizeof(indeg));
scanf("%d %d", &n, &m);
while(m--){
int u, v;
scanf("%d %d", &u, &v);
add(u, v);
}
tarjan();
for(int i =1; i<= cnt; i++){
g[i].clear();
}
for(int u = 1; u <= n; u++){
for(int i = head[u] ; ~i ; i = edge[i].next){
int v = edge[i].to;
if(id[u] != id[v]){
indeg[id[v]]++;
g[id[u]].push_back(id[v]);
}
}
}
if(topsort(cnt)){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}
POJ2762 Going from u to v or from v to u(单连通 缩点)的更多相关文章
- POJ2762 Going from u to v or from v to u? 强连通+缩点
题目链接: poj2762 题意: 给出一幅单向图.问这张图是否满足 随意两点ab 都能 从a到达b 或 从b到达a 题解思路: 推断一幅图是否满足弱连通 首先想到的是将图中的 强连通分量(能互 ...
- POJ2762 Going from u to v or from v to u?(判定单连通图:强连通分量+缩点+拓扑排序)
这道题要判断一张有向图是否是单连通图,即图中是否任意两点u和v都存在u到v或v到u的路径. 方法是,找出图中所有强连通分量,强连通分量上的点肯定也是满足单连通性的,然后对强连通分量进行缩点,缩点后就变 ...
- [poj2762] Going from u to v or from v to u?(Kosaraju缩点+拓排)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Going from u to v or from v to u? Tim ...
- poj2762 Going from u to v or from v to u?
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13040 ...
- 【缩点+拓扑判链】POJ2762 Going from u to v or from v to u?
Description In order to make their sons brave, Jiajia and Wind take them to a big cave. The cave has ...
- Oracle基本数据字典:v$database、v$instance、v$version、dba_objects
v$database: 视图结构: SQL> desc v$database; Name Null? Type - ...
- Going from u to v or from v to u?_POJ2762强连通+并查集缩点+拓扑排序
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Description I ...
- 临时文件相关的v$tempfile v$sort_usage与V$tempseg_usage
SQL> select username,user,segtype,segfile#,segblk#,extents,segrfno# from v$sort_usage; SEGFILE#代表 ...
- [强连通分量] POJ 2762 Going from u to v or from v to u?
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17089 ...
随机推荐
- Android应用反破解的思路
一个Android应用要被破解,要经历:反编译->分析代码->重新编译打包的过程,反破解的思路也是从在这三个步骤上做文章: 1, 寻找反编译工具的缺陷,通过阅读其源码或者对其进行压力测试找 ...
- 解决ubuntu下安装mysql使用service无法启动问题
启动的时候发现service mysql start Rather than invoking init scripts through /etc/init.d, use the service(8) ...
- 5.5---整数A转成整数B(CC150)
自己的: public static int calcCost(int A,int B){ int ans = 1; int temp = A ^ B; while(temp != 1){ if(te ...
- minigui移植到arm linux开发板上无法执行
要保证目录下有该文件 /etc/MiniGUI.cfg 复制过程使用cp –af 强制复制
- eos超时 锁表问题 网友办法
select * from v$locked_object; SELECT sid, serial#, username, osuser FROM v$session where sid = 45; ...
- How to keep Environment Variables when Using SUDO
The trick is to add environment variables to sudoers file via sudo visudo command and add these line ...
- JAVA8 十大新特性详解
前言: Java8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章, 例如Playing with Java ...
- 基于MATLAB的离散小波变换
申明,本文非笔者原创,原文转载自: 基于Matlab的离散小波变换 http://blog.sina.com.cn/s/blog_725866260100ryh3.html 简介 在 ...
- REACT 学习
1.React/React Native 的ES5 ES6写法对照表 http://bbs.reactnative.cn/topic/15/react-react-native-%E7%9A%84es ...
- cxLookupComboBox 控件
cxLookupComboBox cxLookupComboBox1.Properties.ListSource //显示数据源 dtsTmnList cxLookupCombo ...