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

题解:洛谷 P2863 [USACO06JAN] The Cow Prom S

【题目来源】

洛谷:P2863 [USACO06JAN] The Cow Prom S - 洛谷

【题目描述】

有一个 \(n\) 个点,\(m\) 条边的有向图,请求出这个图点数大于 \(1\) 的强连通分量个数。

【输入】

第一行为两个整数 \(n\)\(m\)

第二行至 \(m+1\) 行,每一行有两个整数 \(a\)\(b\),表示有一条从 \(a\)\(b\) 的有向边。

【输出】

仅一行,表示点数大于 \(1\) 的强连通分量个数。

【输入样例】

5 4
2 4
3 5
1 2
4 1

【输出样例】

1

【算法标签】

《洛谷 P2863 The Cow Prom》 #强连通分量# #Tarjan# #USACO# #2006#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 1e4 + 5;  // 定义最大节点数// 全局变量声明
int n, m;               // n: 节点数,m: 边数
vector<int> e[N];       // 图的邻接表
int dfn[N], low[N];     // dfn: 访问时间戳,low: 最早可回溯到的节点时间戳
int tot;                // 时间戳计数器
int stk[N], instk[N];   // stk: 栈,instk: 标记节点是否在栈中
int top;                // 栈顶指针
int scc[N], siz[N];     // scc: 节点所属SCC编号,siz: 每个SCC的大小
int cnt;                // SCC计数器/*** Tarjan算法求强连通分量* @param x 当前访问的节点*/
void tarjan(int x)
{// 入栈处理:设置时间戳并入栈dfn[x] = low[x] = ++tot;stk[++top] = x;instk[x] = 1;// 遍历所有邻接节点for (int y : e[x]){if (!dfn[y])            // 如果y未被访问过{tarjan(y);low[x] = min(low[x], low[y]);  // 回溯时更新low值}else if (instk[y])      // 如果y在栈中{low[x] = min(low[x], dfn[y]);  // 更新low值}}// 判断是否为SCC根节点if (dfn[x] == low[x]){int y;++cnt;  // 增加SCC计数do{y = stk[top--];     // 弹出栈顶元素instk[y] = 0;       // 标记为不在栈中scc[y] = cnt;       // 记录SCC编号++siz[cnt];         // 增加当前SCC的大小} while (y != x);       // 直到处理完当前SCC的所有节点}
}int main()
{// 输入节点数和边数cin >> n >> m;// 构建图的邻接表for (int i = 1; i <= m; i++){int a, b;cin >> a >> b;e[a].push_back(b);}// 对每个未访问的节点执行Tarjan算法for (int i = 1; i <= n; i++){if (!dfn[i]){tarjan(i);}}// 统计大小大于1的SCC数量int ans = 0;for (int i = 1; i <= cnt; i++){if (siz[i] > 1){ans++;}}// 输出结果cout << ans << endl;return 0;
}

【运行结果】

5 4
2 4
3 5
1 2
4 1
1
http://www.jsqmd.com/news/394957/

相关文章:

  • 告别“打字机”:Generative UI 如何重塑 AI 时代的前端交互?
  • DataFrame条件筛选:从入门到实战的数据清洗利器
  • 题解:洛谷 P2700 逐个击破
  • DataFrame数据修改:从基础操作到高效实践的完整指南
  • 深入浅出BlockingQueue(三)
  • 从0学习pwn【第二章】pwngdb调试
  • 题解:洛谷 P1967 [NOIP 2013 提高组] 货车运输
  • 负债上岸不踩坑!口碑好的贷款信用卡个人债务协商公司,渠道+服务全揭秘 - 代码非世界
  • 题解:洛谷 P1396 营救
  • 从0学习pwn【第一章】PWN学习环境搭建
  • 负债逾期别乱投医!2026正规债务协商规划机构排行榜,上岸党实测推荐 - 代码非世界
  • 题解:洛谷 P1194 买礼物
  • 避免提示设计踩雷的秘诀:提示工程架构师的用户流程测试风险评估
  • 免费白嫖可灵+阿里顶级AI,图片视频随便生!不限量
  • 大语言模型在AI原生应用领域的未来展望
  • 题解:洛谷 P3366 【模板】最小生成树
  • 大数据领域数据服务的人工智能算法优化
  • 【每日一题】LeetCode 696. 计数二进制子串
  • 信用卡逾期不用慌!全国专业贷款协商与逾期处理律所实测推荐,负债人上岸指南 - 代码非世界
  • 关于本人发布的应用的隐私策略
  • 股市赚钱学概论:赚钱理之一,赚红利的钱
  • 大数据领域数据工程的边缘计算数据处理方案
  • ANSYS/LS-DYNA 隧道光面爆破数值模拟(CAD+LS-DYNA)课程说明:模型建立、...
  • 我用 AI 写了四五个软件之后的总结
  • 测试一下32位CPU和64位CPU下的long类型变量大小
  • 《解析AI应用架构师眼中人机协作在未来工作的独特优势》
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(车之家)完整教程:从入门到实战部署
  • 企业微信协议接口的安全合规性设计与审计实践 - 教程
  • 意义的主权:AI元人文视域下的古典智慧重释与AI时代的人类责任