当前位置: 首页 > news >正文

Kosaraju算法

今天学了Kosaraju算法!曼波

模板:p2863
对于一个图怎么求它有多少个强连通分量呢?!

1,什么是强连通分量?

• 强连通:在一个有向图G中,如果两个顶点u、v间存在
一条u到v的路径且也存在一条v到u的路径,则称这两个
顶点u、v是强连通的
• 强连通图:有向图G的任意两个顶点都强连通,则称G是
一个强连通图
• 极大强连通子图:G是一个极大强连通子图,当且仅当G
是一个强连通子图且不存在另一个强连图子图G’ G
• 强连通分量:有向非强连通图的极大强连通子图,称为
强连通分量;

Kosaraju算法

一种使用两次dfs的求解方法!一次在原图上,一次在反图上;
然后我们在第一次dfs时记录所有结点的退出顺序,并且在第二次在反图上dfs时按照退出顺序的逆序遍历;
这样第二次就是拓扑序从小到大做,每次就能恰好得到一个强连通分量;
代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
int t=0,ans=0;
vector<int> g[100005];
vector<int> gp[100005];//存反图
int b[50005],s[50005];
void dfs1(int x){b[x]=1;for(int i=0;i<g[x].size();i++){if(!b[g[x][i]]) dfs1(g[x][i]); }s[++t]=x;//记录退出顺序return;
}
void dfs2(int x){b[x]=1;for(int i=0;i<gp[x].size();i++){if(!b[gp[x][i]]){cnt++;dfs2(gp[x][i]);	}}return;
}
int main(){memset(g,0,sizeof(g));memset(gp,0,sizeof(gp));cin>>n>>m;int x,y;for(int i=1;i<=m;i++){cin>>x>>y;g[x].push_back(y);gp[y].push_back(x);}for(int i=1;i<=n;i++){//第一次dfsif(!b[i]) dfs1(i);}memset(b,0,sizeof(b));for(int i=t;i>=1;i--){//第二次dfscnt=0;if(!b[s[i]]){dfs2(s[i]);if(cnt>0) ans++;//题目要求判断点数大于一} }cout<<ans;return 0;
}

听说tarjan更好呢...题解也全是tarjan
下次再学吧~

http://www.sczhlp.com/news/151940/

相关文章:

  • bat批处理设置临时PATH路径不能访问
  • 网站项目运营广告平面设计师的工作内容
  • 安阳网站设计公司不让在建设门户网站
  • 网站开发所需鞍山创网站怎么创
  • 行业自助建站vs2012 做网站教程
  • 10. Spring AI + RAG - Rainbow
  • 《AI智能体实战研发教程(从0到企业级项目落地)》全网上线|CSDN B站同步首发
  • 网站信息安全保障制度建设情况手机摄影网站
  • 北京大兴专业网站建设公司wordpress主题下载失败
  • 单屏网站设计西安知名的集团门户网站建设公司
  • 湛江企业网站建设wordpress安装vps
  • 湘潭公司网站建设电影网站制作教程好不好
  • 手机版网站开发框架wordpress在线升级
  • 京美建站官网奖励软件下载网站
  • 企业门户网站什么意思百度竞价价格
  • 百度网站广告怎么做wordpress 总浏览数量
  • 成都商报官方网站重庆定制网站建设公司
  • 购物网站开发背景及目的ludou wordpress
  • 网站合同书wordpress 编辑器文字大小
  • 劳保用品 技术支持 东莞网站建设商洛城乡建设局网站
  • 个人做理财网站wordpress添加注册页面模板
  • 上海网站建设哪家便宜前端做网站使用的软件工具
  • 网站建设费用计入哪个会计科目wordpress 页面 列表
  • 企业网站建设公司选择分析品牌营销是什么工作
  • 设计网站如何推广哪些网站做企业招聘不要花钱
  • 唐山的网站建设公司网站seo软件
  • 农家乐网站源代码环球贸易网国际站
  • 欧洲外贸网站有哪些如何申请营业执照
  • 青岛找网站建设公司哪家好张家港建网站价格
  • 最好网站设计案例简单好看个人主页网站模板