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

NOIP2015提高组.信息传递

题目

517. 信息传递
在这里插入图片描述

算法标签: 并查集, T a r j a n Tarjan Tarjan算法, s c c scc scc强连通分量

思路

使用强连通分量算法求环上点的数量, 对每个连通分量求最小点数

T a r j a n Tarjan Tarjan算法求解代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;const int N = 200010, M = N;int n;
int head[N], ed[M], ne[M], idx;
int stk[N], top;
int low[N], dfn[N], timestamp;
int id[N], scc_cnt, cnt[N];
bool in_stk[N];void add(int u, int v) {ed[idx] = v, ne[idx] = head[u], head[u] = idx++;
}void tarjan(int u) {dfn[u] = low[u] = ++timestamp;stk[++top] = u, in_stk[u] = true;for (int i = head[u]; ~i; i = ne[i]) {int v = ed[i];if (!dfn[v]) {tarjan(v);low[u] = min(low[u], low[v]);}else if (in_stk[v]) low[u] = min(low[u], dfn[v]);}if (dfn[u] == low[u]) {++scc_cnt;int v;do {v = stk[top--];in_stk[v] = false;id[v] = scc_cnt;cnt[scc_cnt]++;}while (v != u);}
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);memset(head,-1, sizeof head);cin >> n;for (int i = 1; i <= n; ++i) {int t;cin >> t;add(i, t);}for (int i = 1; i <= n; ++i) {if (!dfn[i]) tarjan(i);}int ans = n;for (int i = 1; i <= scc_cnt; ++i) {if (cnt[i] > 1) ans = min(ans, cnt[i]);}cout << ans << "\n";return 0;
}
http://www.xdnf.cn/news/19243.html

相关文章:

  • 线程池 RejectedExecutionException 异常:Task ... rejected from...
  • 体验 OceanBase 参数模板功能
  • PLM系统如何支持利益相关者分析?沟通矩阵设计
  • 多活架构中如何规划数据一致性?
  • 无锡透平叶片将携尖端叶片登陆2025涡轮展,5月苏州相见
  • C++ `shared_ptr` 多线程使用
  • Python中type()函数的深度探索:类型检查与动态类创建
  • [已解决] Cribl 忘记admin 密码
  • 【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API
  • 架构师面试(三十二):注册中心数据结构
  • 常见免杀框架的使用(3款)---【AniYaGUI1.2.0、AV_Evasion_Tool掩日、FoxBypass_V1.0】
  • 遨游科普:三防平板除了三防特性?还能实现什么功能?
  • 广搜bfs-P1443 马的遍历
  • Java学习手册:常见并发问题及解决方案
  • 如何提高单元测试的覆盖率
  • AI开发-效率提升小工具-“打盹弹窗侠”记录
  • Datawhale春训营赛题分析和总结
  • 每日文献(十四)——Part one
  • 2d深度预测
  • 【前端进阶】深入解析 Flexbox 布局中的 flex-shrink 与 gap 兼容性问题
  • 哈佛团队在Cancer Cell发表多模态医学AI模型,整合病理切片和基因组特征,为癌症预后提供新思路
  • stm32f407-01(GPIO)
  • 系统架构师2025年论文通用模板
  • 使用 Puppeteer 监听并打印网页的接口请求
  • 55、⾸屏加载⽩屏怎么进⾏优化
  • 观察者 ➜ 事件总线:一路走来的碎碎念
  • 每天学一个 Linux 命令(23):file
  • RT-Thread学习笔记(二)
  • Linux工具学习之【gcc/g++】
  • 守护者进程小练习