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

消息扩散--tarjan缩点

1.tarjan缩点,将问题简化成多个强连通分量的联通,其中找入度为0的

充分性:不找,那么这些就没有信息收到

必要性:找大于0的,那么连接他们的必定比他们更好,那就只有入度为0的了

2.板子理解不宜,多看

3.例题:炸铁路

受欢迎的 牛

刻录光盘

https://www.luogu.com.cn/problem/P2002

#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef  long long ll;
typedef pair<ll,int> pii;
int n,m;
vector<int> mp[N];
int cnt,c;
int in[N];
int low[N],dfn[N];
int ne[N];
stack<int> st;
void tarjan(int u)
{low[u]=dfn[u]=++cnt;st.push(u);for(int v:mp[u]){if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);}else{if(!ne[v])///现在v还没有归到联通分量 ///先记住 {low[u]=min(low[u],low[v]);}}}if(low[u]==dfn[u]){ne[u]=++c;///第c个联通分量 while(st.top()!=u)///一定要这样写 {int v=st.top();ne[v]=c;st.pop();}st.pop();}
}
ll an;
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=0;i<m;i++){int x,y;cin>>x>>y;if(x!=y)mp[x].push_back(y);} for(int i=1;i<=n;i++){if(!dfn[i])tarjan(i);}for(int i=1;i<=n;i++){for(int v:mp[i]){if(ne[i]!=ne[v]){in[ne[v]]++;///统计缩完之后的点 }}}for(int i=1;i<=c;i++)///遍历缩完之后的强连通分量 {if(!in[i]) an++;}cout<<an;return 0;
}

相关文章:

  • 反转链表链表数据结构oj题(206)
  • 【未完】【GNN笔记】EvolveGCN:Evolving Graph Convolutional Networks for Dynamics Graphs
  • 测试:TestCafe - 判断按钮是否活性化
  • 【Elasticsearch】flattened`类型在查询嵌套数组时可能返回不准确结果的情况
  • 电子电路仿真实验教学平台重磅上线!——深圳航天科技创新研究院倾力打造,助力高校教学数字化转型
  • 产品经理如何做好需求管理
  • 国产三维CAD皇冠CAD(CrownCAD)建模教程:插接箱
  • 安科瑞AcrelEMS3.0企业微电网智慧能源平台-安科瑞 蒋静
  • ZYNQ Overlay硬件库使用指南:用Python玩转FPGA加速
  • OpenCV 级联分类器目标检测
  • 第五部分:第五节 - Express 路由与中间件进阶:厨房的分工与异常处理
  • Linux 系统切换国内镜像源教程
  • 2025年上软考 考试时间+准考证打印全攻略
  • Redis(三) - 使用Java操作Redis详解
  • 昇腾NPU环境搭建
  • 深度学习推理引擎---TensorRT
  • EWOMAIL
  • Debiased Multimodal Understanding for Human Language Sequences
  • STM32外设AD/DA-基础及CubeMX配置
  • 单例模式(Singleton Pattern)详解
  • 总奖金池百万!澎湃与七猫非虚构写作与现实题材征文大赛征稿启动
  • 病重老人取钱在银行门口去世,家属:已协商一致
  • 申论|空间更新结合“青银共生”,助力青年发展型城区建设
  • 科普|男性这个器官晚到岗,可能影响生育能力
  • 娃哈哈:自4月起已终止与今麦郎的委托代工关系,未来将坚持自有生产模式
  • “80后”北京市东城区副区长王智勇获公示拟任区委常委