洛谷—— P2002 消息扩散
P2002 消息扩散
题目背景
本场比赛第一题,给个简单的吧,这 100 分先拿着。
题目描述
有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n个城市都得到消息。
输入输出格式
输入格式:
第一行两个整数n,m表示n个城市,m条单向道路。
以下m行,每行两个整数b,e表示有一条从b到e的道路,道路可以重复或存在自环。
输出格式:
一行一个整数,表示至少要在几个城市中发布消息。
输入输出样例
- 5 4
- 1 2
- 2 1
- 2 3
- 5 1
- 2
说明
【数据范围】
对于20%的数据,n≤200;
对于40%的数据,n≤2,000;
对于100%的数据,n≤100,000,m≤500,000.
【限制】
时间限制:1s,内存限制:256M
【注释】
样例中在4,5号城市中发布消息。
强连通分量裸题
代码:
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #define N 5200000
- using namespace std;
- bool vis[N];
- int n,m,x,y,top,tim,tot,sum,ans,ans1,ans2;
- int in[N],out[N],dfn[N],low[N],head[N],stack[N],belong[N];
- int read()
- {
- ,f=; char ch=getchar();
- ; ch=getchar();}
- +ch-'; ch=getchar();}
- return x*f;
- }
- struct Edge
- {
- int from,to,next;
- }edge[N];
- int add(int x,int y)
- {
- tot++;
- edge[tot].to=y;
- edge[tot].next=head[x];
- head[x]=tot;
- }
- int tarjan(int now)
- {
- dfn[now]=low[now]=++tim;
- stack[++top]=now;vis[now]=true;
- for(int i=head[now];i;i=edge[i].next)
- {
- int t=edge[i].to;
- if(vis[t]) low[now]=min(low[now],dfn[t]);
- else if(!dfn[t]) tarjan(t),low[now]=min(low[now],low[t]);
- }
- if(dfn[now]==low[now])
- {
- sum++;belong[now]=sum;
- for(;stack[top]!=now;top--)
- belong[stack[top]]=sum,vis[stack[top]]=false;
- vis[now]=false; top--;
- }
- }
- int shink_point()
- {
- ;i<=n;i++)
- for(int j=head[i];j;j=edge[j].next)
- if(belong[i]!=belong[edge[j].to])
- in[belong[edge[j].to]]++;
- }
- int main()
- {
- n=read(),m=read();
- ;i<=m;i++)
- x=read(),y=read(),add(x,y);
- ;i<=n;i++)
- if(!dfn[i]) tarjan(i);
- shink_point();
- ;i<=sum;i++)
- if(!in[i]) ans++;
- printf("%d",ans);
- ;
- }
洛谷—— P2002 消息扩散的更多相关文章
- tarjan算法比较详细的讲解&&tarjan常见疑难解答&&洛谷P2002 消息扩散题解
因为有大佬写的比我更长更具体,所以我也就写写总结一下了 引入: 众所周知,很多图中有个东西名叫环. 对于这个东西很多算法都很头疼.(suchas 迪杰斯特拉) 更深层:环属于强联通分量(strongl ...
- 洛谷P2002 消息扩散
题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n ...
- 洛谷 P2002 消息扩散
题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n ...
- 洛谷P2002消息扩散
传送门啦 这个题就是tarjan强连通分量与入度的例题了. 思路: 利用缩点的思想,先预处理一下所有的强连通分量,然后把每个强连通分量内的所有节点看做一个节点,然后处理一张新图,然后检查每个点的入度, ...
- Luogu P2002 消息扩散&&P1262 间谍网络
怕自己太久没写Tarjan了就会把这种神仙算法忘掉. 其实这种类型的图论题的套路还是比较简单且显然的. P2002 消息扩散 很显然的题目,因为在一个环(其实就是强连通分量)中的城市都只需要让其中一个 ...
- 题解【洛谷P2002】消息扩散
题面 题解 \(Tarjan\)裸题. \(Tarjan\)缩点后统计入度为\(0\)的强连通分量个数,输出即可. 代码 #include <iostream> #include < ...
- P2002 消息扩散(缩点)
描述:https://www.luogu.com.cn/problem/P2002 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能 ...
- P2002 消息扩散[SCC缩点]
题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n个城市都得到消息. 输入格式 第一行两个整数n,m表示n个城市, ...
- 【luogu P2002 消息扩散】 题解
题目链接:https://www.luogu.org/problemnew/show/P2002 缩点把原图变为DAG,再在DAG上判断找入度为0的点的个数. 注意一点出度为0的点的个数不等于入度为0 ...
随机推荐
- android 代码中及xml中设置透明
在布局文件的属性中,比如要设置一个LineaerLayout的背景为灰色透明.首先查RGB颜色表灰色是:#9E9E9E,AA代表透明,(透明度从00到FF,00表示完全透明),所以,设置其属性:and ...
- java工作流activiti的步骤
链接:activiti 表名称的解释 工作流从流程定义到创建一个流程实例完成执行步骤(省略bpmn的画法) 工作流的所有操作都是使用流程引擎来进行操作的,流程引擎只是存储流程的过程,而不存储具体的业务 ...
- tomcat https协议
一.tomcat证书 JDK自带的keytool工具来生成证书 1. 在jdk的安装目录\bin\keytool.exe下打开keytool.exe 2. 在命令行中输入以下命令: keytool - ...
- autoHeight.vue 高度自适应
autoHeight.vue 高度自适应 <!-- * @description 自适应高度 * @fileName autoHeight.vue * @author 彭成刚 * @date 2 ...
- 批量下载ts视频文件
第一步 使用chrome 按F12进入开发模式,拖动视频进度条到视频结束: 然后找到.m3u8以结尾的文件并保存为文本文件. 第二步 点开查看里面是否存在如下以ts结尾的文件内容 ...... /20 ...
- 第 6 章 Cinder - 061 - Boot from Volume
Boot from Volume Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume). 打开 instance 的 launch 操作界面. 这 ...
- mybatis-5 手写代理
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Select { public St ...
- VR技术在数据中心3D机房中的应用 (下)
VR技术在数据中心3D机房中的应用 (下) 前面给大家简单科普了一下VR的硬件设备以及VR在各个领域的应用,是不是觉得非常高大上?千言万语概括成一句话,VR能给用户带来前所未有的沉浸感和交互方式,让人 ...
- 调试bug方法总结
打印法 debugger 分段屏蔽法 有没有涉及到异步.延迟请求 渲染顺序
- HNOI2006 花仙子的魔法
题目描述 题解: 考试的时候手画打表,然后半个小时磨了个式子:$$f[i][j]=f[i-1][j-1]+f[i][j-1]$$ 交上去$A$的时候都蒙了. 考后才知道原因. 考虑$n$维空间内原来有 ...