https://www.luogu.org/problem/show?pid=2002

SCC缩点的模板题,缩点后统计入度为0的点的数量就完了。

#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#define maxn 100005
using namespace std;
int n, m;
vector<int> g[maxn], g2[maxn];
int indegree[maxn]; int timer = , cnter = ;
int dfn[maxn], low[maxn], scc[maxn];
stack<int> sta;
bool insta[maxn];
void dfs(int v)
{
/*
low[v]=min{
dfn[v],
low[w], 存在有向边(v,w)且搜索到v时w尚未被搜索到
dfn[w] 存在有向边(v,w)且搜索到v时w在栈内
}
*/
low[v] = dfn[v] = ++timer;
sta.push(v);
insta[v] = true;
for (int i = ; i < g[v].size(); i++)
{
int w = g[v][i];
if (!dfn[w])
{
dfs(w);
low[v] = min(low[v], low[w]);
}
else if (insta[w])
{
low[v] = min(low[v], dfn[w]);
}
}
if (dfn[v] == low[v])
{
++cnter;
int t;
do
{
t = sta.top();
sta.pop();
insta[t] = false;
scc[t] = cnter;
} while (t != v);
}
}
void tarjan_scc()
{
for (int i = ; i <= n; i++)
{
if (!dfn[i])
dfs(i);
}
}
void contract()
{
for (int v = ; v <= n; v++)
{
for (int i = ; i < g[v].size(); i++)
{
// 对于边(v,w),若v与w不在同一SCC,则该边在缩点后的新图为(scc[v],scc[w])
int w = g[v][i];
if (scc[v] != scc[w])
{
g2[scc[v]].push_back(scc[w]);
indegree[scc[w]]++;
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
int u, v;
for (int i = ; i <= m; i++)
{
cin >> u >> v;
g[u].push_back(v);
}
tarjan_scc();
contract(); // 统计得到的DAG中入度为0的点
int ans = ;
for (int i = ; i <= cnter; i++)
{
if (!indegree[i])
ans++;
}
cout << ans << endl;
return ;
}

【luogu P2002】消息扩散的更多相关文章

  1. Luogu P2002 消息扩散&&P1262 间谍网络

    怕自己太久没写Tarjan了就会把这种神仙算法忘掉. 其实这种类型的图论题的套路还是比较简单且显然的. P2002 消息扩散 很显然的题目,因为在一个环(其实就是强连通分量)中的城市都只需要让其中一个 ...

  2. 【luogu P2002 消息扩散】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2002 缩点把原图变为DAG,再在DAG上判断找入度为0的点的个数. 注意一点出度为0的点的个数不等于入度为0 ...

  3. LuoGu P2002 消息扩散

    题目传送门 这个题其实就是tarjan缩点的板子题对吧....至少我是这么想的 首先这是个有向图,对于一个有向图,我们肯定要考虑环的存在与否,恰好这个题又是让我们找出最少的点,使得这几个点能够走遍全图 ...

  4. 洛谷—— P2002 消息扩散

    P2002 消息扩散 题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市 ...

  5. P2002 消息扩散(缩点)

    描述:https://www.luogu.com.cn/problem/P2002 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能 ...

  6. 洛谷P2002 消息扩散

    题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n ...

  7. 洛谷 P2002 消息扩散

    题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n ...

  8. P2002 消息扩散[SCC缩点]

    题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n个城市都得到消息. 输入格式 第一行两个整数n,m表示n个城市, ...

  9. tarjan算法比较详细的讲解&&tarjan常见疑难解答&&洛谷P2002 消息扩散题解

    因为有大佬写的比我更长更具体,所以我也就写写总结一下了 引入: 众所周知,很多图中有个东西名叫环. 对于这个东西很多算法都很头疼.(suchas 迪杰斯特拉) 更深层:环属于强联通分量(strongl ...

  10. P2002 消息扩散

    其实这道题蛮水的 思路: 根据题意,他说有环,自然想到要用tarjan,后面就很简单了: 缩完点之后重新建图,开一个inin数组表示该点的入度是多少(psps:该点表示缩完点之后的大点): 最后统计一 ...

随机推荐

  1. 简单的计算100000以内的质数(JAVA实现)

    public class TestPrimeNumber(int i){ public static void main(String[] args) { long start = System.cu ...

  2. Equations

    Equations Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. 解析 C# 7中的元组类型(ValueTuple)

    System.Tuple 类型是在.NET 4.0中引入的,但是有两个明显的缺点: (1) Tuple 类型是引用类型. (2) 没有构造函数支持. 为了解决这些问题,C# 7 引入了新的语言功能以及 ...

  4. jQuery点击下拉菜单的展示与隐藏

    首先点击显示某个div,然后要求再次点击时消失,或者点击document的其他地方会隐藏掉这个层,涉及到冒泡的问题,阻止document冒泡到dom上.代码如下: var $el = $(" ...

  5. ⑥bootstrap表单使用基础案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. spring boot hello and docker

    主要是想试下spring boot运行在docker里的感觉, 小试牛刀   :) 这是原文,参考一下:  https://spring.io/guides/gs/spring-boot-docker ...

  7. 清理win10过期补丁的命令

    作用是删除已经被新版本取代的旧系统文件 DISM.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase 注1: 执行后, 补丁就无法 ...

  8. C语言的第一个程序 “hello world!”

    1,C语言的简介        C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. ...

  9. Python之Django环境搭建(MAC+pycharm+Django++postgreSQL)

    Python之Django环境搭建(MAC+pycharm+Django++postgreSQL) 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/7828614. ...

  10. JavaScript 系统知识点图库

    JavaScript 是世界上最流行的,轻量级的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备: JavaScript 被数百万计的网 ...