首先做一遍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

消息扩散(强连通分量)相关推荐

  1. HUD2767 进阶版 [强连通分量]

    越狱(break) [问题描述] Michael为救哥哥身陷囹圄,被关进foxriver监狱.为准备越狱,他需要散布消息给监狱中其他人来共同协作,但是监狱中鱼龙混杂,分成各个小团体,内部消息传递单向传 ...

  2. 图论之tarjan真乃神人也,强连通分量,割点,桥,双连通他都会

    先来%一下Robert Tarjan前辈 %%%%%%%%%%%%%%%%%% 然后是热情感谢下列并不止这些大佬的博客: 图连通性(一):Tarjan算法求解有向图强连通分量 图连通性(二):Tarj ...

  3. Tarjan 求有向图的强连通分量

    Tarjan 算法与有向图的连通性 Tarjan 算法是基于对图进行深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树.搜索时,把当前搜索树中未处理的节点加入一个栈,回溯时可以判断栈顶到栈中的节点 ...

  4. 极小连通子图和极大连通子图_强连通分量与拓扑排序

    前言 由于GacUI里面开始多处用上拓扑排序,我决定把之前瞎JB搞出来的算法换掉,换成个正式的.之前我自己弄了个写起来很简单的算法,然后每一处需要用到的地方我就重新做一遍.当然这样肯定也是不行的,我觉 ...

  5. Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...

    转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图 ...

  6. HDU4635(强连通分量+Kosaraju算法)

    题意:给出一个有向图,最多添加多少条边使这个图依然不是强连通图:当这个图是强连通图时,输出-1: 求解思路:强连通分量求解: 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图. ...

  7. poj3352(强连通分量)

    题意:添加多少边才能使这个无向图为双连通分量. 注意:双连通分量适用于无向图:而强连通分量适用于有向图.但是这两个概念都是一样的. #include<iostream> #include& ...

  8. poj2553(强连通分量)

    题意:给出有向图,图的底部是所有汇节点的子集,即,底部(G)={v∈V\x-∀w∈V:(v→w)⇒(w→v)},w在--里面G可以从v, v也可从w.让我们求有多少个点是绘点的问题. 思路:先求解出强 ...

  9. poj2186(强连通分量)

    思路:找出出度为0 的顶点,如果出度为0的顶点大于1,则解为零,否则解就是出度为零的顶点的连通分支数. 刚开始是没有理解这道题的,也是看了大神之后才理解的. 方法一: #include<iost ...

  10. poj1236(强连通分量)

    题意: (1).至少需要向多少个学校发放软件,要使这个网络中的所有学校都能得到软件 (2).至少需要添加多少条边,才能使这个网络成为一个强连通分量图. 思路:首先求解强连通分量,如果不是同一个强连通分 ...

最新文章

  1. 检测到你的手机处于root环境_选择群控系统的注意事项!繁星云手机盒子会比群控更合适好用吗!...
  2. matlab 向量模量,有限元分析简单实例之平面矩形薄板(matlab)
  3. Q+ Web 改版设计小结
  4. Shell教程(六):函数、联机帮助
  5. 【网易云信招聘啦】216位攻城狮,呼唤7个好基友
  6. Android 开发技能图谱
  7. Angular使用Console.log()打印出来的数据没问题,点击详情后数据变了
  8. Go、Java 和 Rust 的比较
  9. 构造函数及其参数列表初始化问题
  10. 旅游规划(双权连通图)
  11. QT MD4 MD5 Sha1等几种加密方式
  12. mysql libaio_手动编译安装mysql,报错没有libaio模块,
  13. 计算机考试报名照片可以是白底吗,软考报名照片必须白底的是吗?
  14. SDRAM控制器(初始化)
  15. excel文件修复工具_psd文件修复工具下载|Recovery Toolbox for ps 最新版v2.3.1.0 下载
  16. PHP 仍然是最流行的服务器端编程语言
  17. 【Audio音频兴趣拓展】如何调试频响曲线?
  18. 简单的省市区级联SQL脚本
  19. 【Cactus仙人掌图】仙人掌基础知识学习笔记
  20. 服务器安全神器,Linux 上安装 Fail2Ban 保护 SSH

热门文章

  1. php和java融合_JSP、PHP与JAVA融合的开发环境之二
  2. JAVA实现单链表数据结构_java实现数据结构单链表示例(java单链表)
  3. java语言与www技术形成性考核册_电大Java语言与WWW技术形成性考核程序题
  4. linux定时任务配置失效,linux下定时任务和延迟任务
  5. laravel报错:TokenMismatchException in VerifyCsrfToken.php
  6. 【深夜思考】java百度云资源
  7. 智能集群理论优化控制_无人机集群对抗研究的关键问题
  8. adsl服务器客户端配置cisco_基于ISE对Cisco网络设备部署AAA
  9. “小米造车”终于尘埃落定,网络营销下“造车时代”终将到来
  10. 网络营销专员浅析网络营销优化对企业来说意味着什么?