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

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

#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. dango foreign key 指定被引用模型的字段

    用 to_field pool_no = models.ForeignKey('SimCardPool', verbose_name=u'卡池编号', db_column='pool_no', to_ ...

  2. faac编码aac

    // faacode.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <faac.h> #include &l ...

  3. java面试宝典(蓝桥学院)

    Java面试宝典(蓝桥学院) 回答技巧 这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果.由于这套试题涉及的范围 ...

  4. 如何使用参数 appActivity+appPackage 和 app

    本文针对RobotFrameWork中AppiumLibrary测试库. 首先,Open Application 这个方法不能向手机中安装应用,需要提前在手机中安装好,如使用 adb install ...

  5. ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)

    这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...

  6. Xcode 6.3.2 提交APP(Upload Archive)时崩溃的解决办法

    最近在上传为客户做的APP时,发现Xcode总会在进行到Upload Archive这一步时崩溃,导致APP上载不了.下面说说网上搜索到的几种解决办法. 方法一 亲测有效,很简单: 1.重新打开Xco ...

  7. Django~Databases

    更换数据库 migrate 下哈 admin 要重新建立 修改\mysite\settings.py DATABASES = {    'default': {        'ENGINE': 'd ...

  8. [转] This Android SDK requires Android Developer Toolkit version 23.0.0 or above

    问题描述: This Android SDK requires Android Developer Toolkit version 23.0.0 or above.  Current version ...

  9. 后台session过期,tomcat重启,自动跳转页面js写法

    if (window != top) { //top.location.href = location.href;//因为系统分为普通用户和后台,所以暂时写死 if(top.location.href ...

  10. 3.UNION

    --联合结果集union(集合运算符-- group by StudentNo union ---union可以合并多个结果集 --它有两个前提和一个注意: --1.合并的结果集的列数必须完全一致 - ...