消息扩散(强连通分量)
首先做一遍tarjan
然后枚举每个边判断是否在同一个连通块内
在新图上跑一边入度
若入度为0,ans累计
输出即可
题面
#include<bits/stdc++.h> using namespace std; const int N=2e7+7; int m,n,k,p,idx,cnt,num,ans; struct node {int nx,to; } e[N]; bool vis[N]; stack<int> s; int head[N],dfn[N],low[N],sum[N],color[N],in[N]; void add_edge(int a,int b) {cnt++;e[cnt].to=b;e[cnt].nx=head[a];head[a]=cnt; } void paint(int x) {s.pop();color[x]=num;sum[num]++;vis[x]=false; } void tarjan(int x) {dfn[x]=low[x]=++idx;s.push(x);vis[x]=true;for (int i=head[x];i;i=e[i].nx){int y=e[i].to;if (!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);}else if (vis[y]) low[x]=min(low[x],dfn[y]);}if (dfn[x]==low[x]){num++;while (s.top()!=x){int t=s.top();paint(t);}paint(x);} } int main() {scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);add_edge(x,y);}for (int i=1;i<=n;i++)if (!dfn[i]) tarjan(i);for (int i=1;i<=n;i++){for (int j=head[i];j;j=e[j].nx){int y=e[j].to;if (color[i]==color[y]) continue;in[color[y]]++;}}for (int i=1;i<=num;i++)if (in[i]==0) ans++;printf("%d",ans);return 0; }
转载于:https://www.cnblogs.com/Hale522520/p/10626788.html
消息扩散(强连通分量)相关推荐
- HUD2767 进阶版 [强连通分量]
越狱(break) [问题描述] Michael为救哥哥身陷囹圄,被关进foxriver监狱.为准备越狱,他需要散布消息给监狱中其他人来共同协作,但是监狱中鱼龙混杂,分成各个小团体,内部消息传递单向传 ...
- 图论之tarjan真乃神人也,强连通分量,割点,桥,双连通他都会
先来%一下Robert Tarjan前辈 %%%%%%%%%%%%%%%%%% 然后是热情感谢下列并不止这些大佬的博客: 图连通性(一):Tarjan算法求解有向图强连通分量 图连通性(二):Tarj ...
- Tarjan 求有向图的强连通分量
Tarjan 算法与有向图的连通性 Tarjan 算法是基于对图进行深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树.搜索时,把当前搜索树中未处理的节点加入一个栈,回溯时可以判断栈顶到栈中的节点 ...
- 极小连通子图和极大连通子图_强连通分量与拓扑排序
前言 由于GacUI里面开始多处用上拓扑排序,我决定把之前瞎JB搞出来的算法换掉,换成个正式的.之前我自己弄了个写起来很简单的算法,然后每一处需要用到的地方我就重新做一遍.当然这样肯定也是不行的,我觉 ...
- Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...
转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图 ...
- HDU4635(强连通分量+Kosaraju算法)
题意:给出一个有向图,最多添加多少条边使这个图依然不是强连通图:当这个图是强连通图时,输出-1: 求解思路:强连通分量求解: 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图. ...
- poj3352(强连通分量)
题意:添加多少边才能使这个无向图为双连通分量. 注意:双连通分量适用于无向图:而强连通分量适用于有向图.但是这两个概念都是一样的. #include<iostream> #include& ...
- poj2553(强连通分量)
题意:给出有向图,图的底部是所有汇节点的子集,即,底部(G)={v∈V\x-∀w∈V:(v→w)⇒(w→v)},w在--里面G可以从v, v也可从w.让我们求有多少个点是绘点的问题. 思路:先求解出强 ...
- poj2186(强连通分量)
思路:找出出度为0 的顶点,如果出度为0的顶点大于1,则解为零,否则解就是出度为零的顶点的连通分支数. 刚开始是没有理解这道题的,也是看了大神之后才理解的. 方法一: #include<iost ...
- poj1236(强连通分量)
题意: (1).至少需要向多少个学校发放软件,要使这个网络中的所有学校都能得到软件 (2).至少需要添加多少条边,才能使这个网络成为一个强连通分量图. 思路:首先求解强连通分量,如果不是同一个强连通分 ...
最新文章
- 检测到你的手机处于root环境_选择群控系统的注意事项!繁星云手机盒子会比群控更合适好用吗!...
- matlab 向量模量,有限元分析简单实例之平面矩形薄板(matlab)
- Q+ Web 改版设计小结
- Shell教程(六):函数、联机帮助
- 【网易云信招聘啦】216位攻城狮,呼唤7个好基友
- Android 开发技能图谱
- Angular使用Console.log()打印出来的数据没问题,点击详情后数据变了
- Go、Java 和 Rust 的比较
- 构造函数及其参数列表初始化问题
- 旅游规划(双权连通图)
- QT MD4 MD5 Sha1等几种加密方式
- mysql libaio_手动编译安装mysql,报错没有libaio模块,
- 计算机考试报名照片可以是白底吗,软考报名照片必须白底的是吗?
- SDRAM控制器(初始化)
- excel文件修复工具_psd文件修复工具下载|Recovery Toolbox for ps 最新版v2.3.1.0 下载
- PHP 仍然是最流行的服务器端编程语言
- 【Audio音频兴趣拓展】如何调试频响曲线?
- 简单的省市区级联SQL脚本
- 【Cactus仙人掌图】仙人掌基础知识学习笔记
- 服务器安全神器,Linux 上安装 Fail2Ban 保护 SSH
热门文章
- php和java融合_JSP、PHP与JAVA融合的开发环境之二
- JAVA实现单链表数据结构_java实现数据结构单链表示例(java单链表)
- java语言与www技术形成性考核册_电大Java语言与WWW技术形成性考核程序题
- linux定时任务配置失效,linux下定时任务和延迟任务
- laravel报错:TokenMismatchException in VerifyCsrfToken.php
- 【深夜思考】java百度云资源
- 智能集群理论优化控制_无人机集群对抗研究的关键问题
- adsl服务器客户端配置cisco_基于ISE对Cisco网络设备部署AAA
- “小米造车”终于尘埃落定,网络营销下“造车时代”终将到来
- 网络营销专员浅析网络营销优化对企业来说意味着什么?