LightOJ - 1210 Efficient Traffic System(强连通)
来源:互联网 发布:网络维护与故障排解 编辑:程序博客网 时间:2024/06/06 12:29
题目大意:给出一张有向图,问需要添加多少条边,才能使该有向图变成强连通图
解题思路:强连通,缩点,算出每点的入度和出度,找出max(入度为0,出度为0),这个就是答案
解释一下为什么,如果要强连通的话,就得让所有点都有入度和出度,所以添加的边的数量就是max(入度为0,出度为0)
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 20010;const int M = 50010;struct Edge{ int u, v, next; Edge() {} Edge(int u, int v, int next): u(u), v(v), next(next) {}}E[M];int head[N], sccno[N], pre[N], lowlink[N], Stack[N], in[N], out[N];int n, m, scc_cnt, dfs_clock, top, cas = 1;void dfs(int u, int fa) { pre[u] = lowlink[u] = ++dfs_clock; Stack[++top] = u; for (int i = head[u]; ~i; i = E[i].next) { int v = E[i].v; if (!pre[v]) { dfs(v, u); lowlink[u] = min(lowlink[u], lowlink[v]); } else if (!sccno[v]) lowlink[u] = min(lowlink[u], pre[v]); } if (pre[u] == lowlink[u]) { scc_cnt++; int x; while (1) { x = Stack[top--]; sccno[x] = scc_cnt; if (x == u) break; } }}void solve() { if (n <= 1) { printf("Case %d: %d\n", cas++, 0); return ; } memset(pre, 0, sizeof(pre)); memset(sccno, 0, sizeof(sccno)); scc_cnt = dfs_clock = top = 0; for (int i = 1; i <= n; i++) if (!pre[i]) dfs(i, -1); if (scc_cnt == 1) { printf("Case %d: %d\n", cas++, 0); return ; } memset(in, 0, sizeof(in)); memset(out, 0, sizeof(out)); for (int i = 0; i < m; i++) { int u = sccno[E[i].u]; int v = sccno[E[i].v]; if (u == v) continue; out[u] = 1; in[v] = 1; } int in_cnt = 0, out_cnt = 0; for (int i = 1; i <= scc_cnt; i++) { if (!in[i]) in_cnt++; if (!out[i]) out_cnt++; } printf("Case %d: %d\n", cas++, max(in_cnt, out_cnt));}void init() { memset(head, -1, sizeof(head)); scanf("%d%d", &n, &m); int u, v; for (int i = 0; i < m; i++) { scanf("%d%d", &u, &v); E[i] = Edge(u, v, head[u]); head[u] = i; }}int main() { int test; scanf("%d", &test); while (test--) { init(); solve(); } return 0;}
0 0
- LightOJ - 1210 Efficient Traffic System(强连通)
- [强连通分量]LightOJ 1210 - Efficient Traffic System
- LightOJ 1210 - Efficient Traffic System【强连通图】
- LightOJ 1210 Efficient Traffic System
- lightoj 1210 - Efficient Traffic System
- LightOJ - 1281 New Traffic System
- lightoj 1281 - New Traffic System
- hdu3072 Intelligence System【强连通】
- LightOJ - 1417 Forwarding Emails(强连通+dfs)
- lightoj 1034【强连通+缩点】
- bzoj 2387: [Ceoi2011]Traffic 强连通分量+dp
- jzoj3577 [CEOI2011]Traffic 强连通分量缩点
- lightoj 1281 - New Traffic System (有限制最短路)
- LightOJ - 1281 New Traffic System(二维最短路)
- HDU 3072 Intelligence System(强连通分量)
- hdu 3072 Intelligence System(强连通分量)
- HDU 3072 Intelligence System (强连通分量)
- HDU 3072 Intelligence System(强连通分量)
- Android View的属性
- 谷歌邮件智能回复系统:基于循环神经网络构建
- UVa11809 - Floating-Point Numbers
- 排序算法(七):归并排序
- Error -1Cause: org/gradle/api/publication/maven/internal Android studio配置android-maven-gradle-plugin
- LightOJ - 1210 Efficient Traffic System(强连通)
- 在两个Activity之间传递IntArray(整形数组)
- IP协议详解---Linux学习笔记
- linux如何安装jdk
- Linux虚拟地址空间概述
- Android缓存工具类
- window.location.href不转跳的解决方法 与a标签空链接有关
- LightOJ - 1417 Forwarding Emails(强连通+dfs)
- C++在非面向对象方面的一些特性(基本)