博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kosaraju算法、强连通图(例C-班长竞选
阅读量:3949 次
发布时间:2019-05-24

本文共 1561 字,大约阅读时间需要 5 分钟。

既然PPT有现成的,我就不特意再写一个Kosaraju算法解释了。一会把课堂上的PPT扒上来做笔记。

目录

强连通图

什么是强连通图?

强连通图(Strongly Connected Graph)是指在有向图G中,如果对于每

一对vi、vj,vi≠vj,从vi到vj和从vj到vi都存在路径,则称G是强连通图。有
向图中的极大强连通子图称做有向图的强连通分量

DFS序

在这里插入图片描述

Kosaraju算法

在这里插入图片描述

默默地感叹一句:TA的PPT实在是写得太好了!!!

例:班长竞选

大学班级选班长,N 个同学均可以发表意见

若意见为 A B 则表示 A 认为 B 合适,意见具有传递性,即 A 认为 B 合适,B 认为 C 合适,则 A 也认为 C 合适
勤劳的 TT 收集了M条意见,想要知道最高票数,并给出一份候选人名单,即所有得票最多的同学,你能帮帮他吗?

Input

本题有多组数据。第一行 T 表示数据组数。每组数据开始有两个整数 N 和 M (2 <= n <= 5000, 0 <m <= 30000),接下来有 M 行包含两个整数 A 和 B(A != B) 表示 A 认为 B 合适。
Output
对于每组数据,第一行输出 “Case x: ”,x 表示数据的编号,从1开始,紧跟着是最高的票数。
接下来一行输出得票最多的同学的编号,用空格隔开,不忽略行末空格!

Sample Input

24 33 22 02 13 31 02 10 2

Output

Case 1: 2
0 1
Case 2: 2
0 1 2

题解:A认为B合适,链接一条有向边A→B,B→C,有A→C,满足传递关系实则我们可以把它视为一个强连通图问题,支持A的人就等于能够达到A点的点和可以到达能够到达A点的点的点所在的强连通分量(这句话有点拗口我画幅图理解吧

在这里插入图片描述

由上图可以知道1是得到2和3支持的,但是3又是被5支持的,而5所在

的强连通分量,5是被4,7,6支持的,故因为传递性,所以1也会得到
5,4,6,7的支持

Codes

#include
#include
#include
using namespace std;const int maxn=1e5;int t,n,m,a,b,scnt,dcnt;//t测试组数,n个点,m条边,scnt,dcnt计数第几次访问 int vis[maxn],scn[maxn],scc[maxn],sc[maxn],c[maxn],dfn[maxn];//dfn-dfs后序列第i个点 //vis-是否访问过,c[i]i号点所在scc编号 vector
G1[maxn],G2[maxn],G3[maxn],G4[maxn];//原图,反图 ,入度为0的点图,最后关系图void Init(){
//疯狂初始化 for(int i=0;i
=1;i--){
if(c[dfn[i]]==0){
++scnt; dfs2(dfn[i]); } }}int main(){
ios::sync_with_stdio(false); cin>>t;//组数 for(int j=1;j<=t;j++){
Init();//初始化 cin>>n>>m; for(int i=0;i
>a>>b; G1[a].push_back(b);//原图 G2[b].push_back(a);//构造反图 }//反图的SCC和原图的SCC是相同的 kosaraju();//求出联通分量 for(int i=0;i

转载地址:http://cdwzi.baihongyu.com/

你可能感兴趣的文章
15个用于管理MySQL服务器mysqladmin命令
查看>>
服务器端I / O性能:Node,PHP,Java与Go
查看>>
多行文本编辑时,同一行编辑不同类型的字符时自动换行的问题
查看>>
如何使开机动画只播一次
查看>>
如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁
查看>>
restore factory属性的enable和disable
查看>>
Android LOG机制流程图
查看>>
如何在JNI中抛异常
查看>>
Android应用程序的完全退出
查看>>
Task和Activity相关的一些属性
查看>>
JAVA系统属性之user.home
查看>>
Android代码截屏
查看>>
Android中打印代码的调用层次
查看>>
成功者十三个价值连城的习惯
查看>>
特别成功的人会做6件事
查看>>
Android: 用jni 获取MAC地址
查看>>
字符串列表的C语言实现:c_strlist
查看>>
客户沟通的方式:礼貌待客沟通方式,技巧推广沟通方式,个性服务沟通方式
查看>>
用弹性工作制留住员工
查看>>
知识=经验×反思2
查看>>