判断图是否单连通,先用强连通分图处理,再拓扑排序,需注意:

符合要求的不一定是链
拓扑排序列结果唯一,即在队列中的元素始终只有一个

#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(单连通 缩点)的更多相关文章

  1. POJ2762 Going from u to v or from v to u? 强连通+缩点

    题目链接: poj2762 题意: 给出一幅单向图.问这张图是否满足   随意两点ab 都能 从a到达b 或  从b到达a 题解思路: 推断一幅图是否满足弱连通 首先想到的是将图中的 强连通分量(能互 ...

  2. POJ2762 Going from u to v or from v to u?(判定单连通图:强连通分量+缩点+拓扑排序)

    这道题要判断一张有向图是否是单连通图,即图中是否任意两点u和v都存在u到v或v到u的路径. 方法是,找出图中所有强连通分量,强连通分量上的点肯定也是满足单连通性的,然后对强连通分量进行缩点,缩点后就变 ...

  3. [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 ...

  4. 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 ...

  5. 【缩点+拓扑判链】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 ...

  6. Oracle基本数据字典:v$database、v$instance、v$version、dba_objects

    v$database: 视图结构: SQL> desc v$database; Name                                      Null?    Type - ...

  7. 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 ...

  8. 临时文件相关的v$tempfile v$sort_usage与V$tempseg_usage

    SQL> select username,user,segtype,segfile#,segblk#,extents,segrfno# from v$sort_usage; SEGFILE#代表 ...

  9. [强连通分量] 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 ...

随机推荐

  1. Android应用反破解的思路

    一个Android应用要被破解,要经历:反编译->分析代码->重新编译打包的过程,反破解的思路也是从在这三个步骤上做文章: 1, 寻找反编译工具的缺陷,通过阅读其源码或者对其进行压力测试找 ...

  2. 解决ubuntu下安装mysql使用service无法启动问题

    启动的时候发现service mysql start Rather than invoking init scripts through /etc/init.d, use the service(8) ...

  3. 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 ...

  4. minigui移植到arm linux开发板上无法执行

    要保证目录下有该文件 /etc/MiniGUI.cfg 复制过程使用cp –af 强制复制

  5. eos超时 锁表问题 网友办法

    select * from v$locked_object; SELECT sid, serial#, username, osuser FROM v$session where sid = 45; ...

  6. 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 ...

  7. JAVA8 十大新特性详解

    前言: Java8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章, 例如Playing with Java ...

  8. 基于MATLAB的离散小波变换

    申明,本文非笔者原创,原文转载自:  基于Matlab的离散小波变换         http://blog.sina.com.cn/s/blog_725866260100ryh3.html 简介 在 ...

  9. REACT 学习

    1.React/React Native 的ES5 ES6写法对照表 http://bbs.reactnative.cn/topic/15/react-react-native-%E7%9A%84es ...

  10. cxLookupComboBox 控件

    cxLookupComboBox cxLookupComboBox1.Properties.ListSource        //显示数据源     dtsTmnList cxLookupCombo ...