hdu2767 Proving Equivalences,有向图强联通,Kosaraju算法
有向图强联通,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算法的更多相关文章
- 【Python排序搜索基本算法】之深度优先搜索、广度优先搜索、拓扑排序、强联通&Kosaraju算法
Graph Search and Connectivity Generic Graph Search Goals 1. find everything findable 2. don't explor ...
- POJ 3180-The Cow Prom (图论-有向图强联通tarjan算法)
题目大意:有n个牛在一块, m条单项绳子, 有m个链接关系, 问有多少个团体内部任意两头牛可以相互可达 解题思路:有向图强连通分量模版图 代码如下: #include<stdio.h> # ...
- HDU2767 Proving Equivalences(加边变为强联通图)
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 有向图的强联通tarjan算法(判断是否为强联通模板)(hdu1269)
hdu1269 迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- POJ 1236-Network of Schools (图论-有向图强联通tarjan)
题目链接:http://poj.org/problem?id=1236 题目大意:N(2<N<100)个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输.问题 ...
- hdu2767 Proving Equivalences --- 强连通
给一个图,问至少加入�多少条有向边能够使图变成强连通的. 原图是有环的,缩点建图,在该DAG图上我们能够发现,要使该图变成强连通图必须连成环 而加入�最少的边连成环,就是把图上入度为0和出度为0的点连 ...
- HDU2767 Proving Equivalences
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- hdu2767 Proving Equivalences Tarjan缩点
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- UVALive-4287 Proving Equivalences 有向图的强连通分量+缩点
题意:有n个命题,已知其中的m个推导,要证明n个命题全部等价(等价具有传递性),最少还需要做出几次推导. 思路:由已知的推导可以建一张无向图,则问题变成了最少需要增加几条边能使图变成强连通图.找出所有 ...
随机推荐
- [luogu普及] ---P1032 字串变换
目的 刷完100AC (最近很不舒服,写博客耗时啊 记录第一个字符串的题目 参考 https://www.luogu.org/blog/user20197/solution-p1032 代码 #inc ...
- 44.Qt通过子类化qstyle实现自定义外观
main.cpp #include <QtGui> #include "brozedialog.h" #include "bronzestyle.h" ...
- Android CollapsingToolbarLayout Toolbar的title覆盖问题
CollapsingToolbarLayout 里: app:titleEnabled="true" app:title="Hello" Toolbar 里: ...
- javaEE_maven_struts2_tomcat_first
1 .eclipse中新建项目
- PHP 数组 & 字符串处理
1:数组分割为字符串 implode 2:字符串分割为数组 explode() 3:替换字符串 eg: $a = "Hello world" str_replace(“H”,“ ...
- Redmine 甘特图导出 PDF 和 PNG 中文乱码问题
Redmine使用了RMagick来处理图片,fpdf处理PDF,并在调用时设定了字体PDF中文字体 redmine 中关于PDF字体设置的代码 case pdf_encoding ...
- Jenkins 部署 PHP 应用
安装 Jenkins 方式一:docker方式安装 拉取jenkins官方镜像,按照镜像文档启动镜像就可以了 方式二:手动安装 以下所有操作都使用 root 用户进行操作. 在各项目官网,下载 Jav ...
- 路飞学城Python-Day137
django项目二 个人博客系统 github地址:https://github.com/pandaboy1123/cnblog
- WTM
WTM的由来 WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代 ...
- Centos 7.2 安装和卸载 MySQL 5.7
一.背景 闲暇之余在虚拟机安装了 Centos 7.2 系统,按照 <简单安装MySQL(RPM方式)> 这篇文章安装 MySQL ,发现由于包依赖的问题安装失败,于是索性在官网查询相关文 ...