点击打开链接

有向图强联通,Kosaraju算法

缩点后分别入度和出度为0的点的个数 answer = max(a, b);

scc_cnt = 1; answer = 0

#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
#include<stack>
using namespace std; const int maxn = 20000 + 10; vector<int> G[maxn], G2[maxn];
vector<int> S;
int vis[maxn], sccno[maxn], scc_cnt; void dfs1(int u){
if(vis[u]) return ;
vis[u] = 1;
for(int i=0; i<G[u].size(); ++i) dfs1(G[u][i]);
S.push_back(u);
} void dfs2(int u){
if(sccno[u]) return ;
sccno[u] = scc_cnt;
for(int i=0; i<G2[u].size(); ++i)dfs2(G2[u][i]);
} void find_scc(int n){
scc_cnt = 0;
S.clear();
memset(sccno, 0, sizeof sccno );
memset(vis, 0, sizeof vis );
for(int i=0; i<n; ++i) dfs1(i);
for(int i=n-1; i>=0; --i){
if(!sccno[S[i]]) {
scc_cnt++;
dfs2(S[i]);
}
}
} int in[maxn], out[maxn]; int main(){
int T, n, m;
scanf("%d", &T);
while(T--){
scanf("%d%d", &n, &m);
for(int i=0; i<n; ++i) {
G[i].clear(); G2[i].clear();
}
for(int i=0; i<m; ++i){
int u, v;
scanf("%d%d", &u, &v); u--; v--;
G[u].push_back(v);
G2[v].push_back(u);
} find_scc(n);
if(scc_cnt==1){
printf("0\n");
continue;
}
memset(in, 0, sizeof in );
memset(out, 0, sizeof out );
for(int u=0; u<n; ++u){
for(int i=0; i<G[u].size(); ++i){
int &v = G[u][i];
if(sccno[u] != sccno[v]) {
out[sccno[u]]++;
in[sccno[v]]++;
}
}
} int a = 0, b = 0;
for(int i=1; i<=scc_cnt; ++i){
if(!in[i]) a++;
if(!out[i]) b++;
}
printf("%d\n", max(a, b));
}
return 0;
}

hdu2767 Proving Equivalences,有向图强联通,Kosaraju算法的更多相关文章

  1. 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法

    Graph Search and Connectivity Generic Graph Search Goals 1. find everything findable 2. don't explor ...

  2. POJ 3180-The Cow Prom (图论-有向图强联通tarjan算法)

    题目大意:有n个牛在一块, m条单项绳子, 有m个链接关系, 问有多少个团体内部任意两头牛可以相互可达 解题思路:有向图强连通分量模版图 代码如下: #include<stdio.h> # ...

  3. HDU2767 Proving Equivalences(加边变为强联通图)

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  4. 有向图的强联通tarjan算法(判断是否为强联通模板)(hdu1269)

    hdu1269 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  5. POJ 1236-Network of Schools (图论-有向图强联通tarjan)

    题目链接:http://poj.org/problem?id=1236 题目大意:N(2<N<100)个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输.问题 ...

  6. hdu2767 Proving Equivalences --- 强连通

    给一个图,问至少加入�多少条有向边能够使图变成强连通的. 原图是有环的,缩点建图,在该DAG图上我们能够发现,要使该图变成强连通图必须连成环 而加入�最少的边连成环,就是把图上入度为0和出度为0的点连 ...

  7. HDU2767 Proving Equivalences

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  8. hdu2767 Proving Equivalences Tarjan缩点

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  9. UVALive-4287 Proving Equivalences 有向图的强连通分量+缩点

    题意:有n个命题,已知其中的m个推导,要证明n个命题全部等价(等价具有传递性),最少还需要做出几次推导. 思路:由已知的推导可以建一张无向图,则问题变成了最少需要增加几条边能使图变成强连通图.找出所有 ...

随机推荐

  1. 10分钟教你Python+MySQL数据库操作

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...

  2. linux 免密登陆(超简单)

    一.客户端生产公钥 在windwos上 生成公钥私钥前,先下载git哦 ssh-keygen -t rsa# 记住下方方框内公钥保存地址, 二.查看自己用户的登录地址 cat /etc/passwd ...

  3. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

  4. maven 打包jar && lib

    一.springboot 打包成jar 1.pom.xml <build> <!-- jar的名称--> <finalName>shiro</finalNam ...

  5. BZOJ 1018 线段树维护图的连通性问题

    思路: 我们可以搞一棵线段树 对于一段区间有6种情况需要讨论 左上右下.左上右上.左下右下.左下右上 这四种比较好维护 用左上右下举个例子吧 就是左儿子的左上右下&左区间到右区间下面有路&am ...

  6. [转]Microsoft Solutions Framework (MSF) Overview

    本文转自:http://msdn.microsoft.com/zh-CN/library/jj161047(v=vs.120).aspx [This documentation is for prev ...

  7. C-数据和C

    1.常量与变量数据 有些数据在程序使用之前预先设定,并在整个运行过程中没有变化,叫做常量.另外的数据在程序运行过程中可能变化或被赋值,叫做变量. 2.数据类型关键字 对于变量,编译器通过声明语句中指定 ...

  8. JavaWeb详细学习路线图

    - Java攻城狮学习路线 - 图转自网络.

  9. 【Oracle】RMAN备份

    1. 完全备份 RMAN> backup as backupset database; Starting allocated channel: ORA_DISK_1 channel ORA_DI ...

  10. BigDecimal,注解

    BigDecimal 问题重现 今天在干活的途中,发现一个很坑爹的问题,让我来复现下问题: 从上游接口获得的余额,对于为0的,做了判断 BigDecimal a = new BigDecimal(ac ...