计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-F-Islands
2017-09-11 14:16
537 查看
ACM模版
题解
我不喜欢计蒜客,我都等了两天了,还没有地方可以提交……现在连题目都看不了,算了,题解就不写了,光发一下代码吧……代码
#include <iostream> #include <stack> #include <cstring> #include <vector> using namespace std; const int MAXN = 1e4 + 7; int n, m; int low[MAXN]; int pre[MAXN]; int sccno[MAXN]; int in[MAXN]; int out[MAXN]; int dfs_clock, scc_cnt; stack<int> s; vector<int> G[MAXN]; void dfs(int u) { low[u] = pre[u] = ++dfs_clock; s.push(u); for (int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if (!pre[v]) { dfs(v); low[u] = min(low[v], low[u]); } else if (!sccno[v]) { low[u] = min(low[u], pre[v]); } } int x; if (low[u] == pre[u]) { scc_cnt++; while (1) { x = s.top(); s.pop(); sccno[x] = scc_cnt; if (x == u) { break; } } } } int main() { int T; scanf("%d", &T); while (T--) { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { G[i].clear(); } memset(in, 0, sizeof(in)); memset(out, 0, sizeof(out)); memset(sccno, 0, sizeof(sccno)); memset(pre, 0, sizeof(pre)); dfs_clock = 0, scc_cnt = 0; int u, v; for (int i = 0; i < m; i++) { scanf("%d%d", &u, &v); G[u].push_back(v); } for (int i = 1; i <= n; i++) { if (!pre[i]) { dfs(i); } } for (int i = 1; i <= n; i++) { for (int j = 0; j < G[i].size(); j++) { if (sccno[i] != sccno[G[i][j]]) { out[sccno[i]]++; in[sccno[G[i][j]]]++; } } } int cnt1 = 0, cnt2 = 0; for (int i = 1; i <= scc_cnt; i++) { if (in[i] == 0) { cnt1++; } if (out[i] == 0) { cnt2++; } } if (scc_cnt == 1) { puts("0"); } else { printf("%d\n", max(cnt1, cnt2)); } } return 0; }
相关文章推荐
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛F题Islands(有向图加最少的边变成强连通图)
- 计蒜客 16955 Islands(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 F)
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-总结及部分代码
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-A-Banana
- 计蒜客 16950 Banana(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A)
- F. Islands 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-C-Coconut
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-E-Half-consecutive Numbers
- 计蒜客 16952 Coconut(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 C)
- 计蒜客 16954 Half-consecutive Numbers(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 E)
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 Islands
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-G-Query on a string
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 F. Islands
- 计蒜客 16956 Query on a string(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 G)
- 计蒜客-2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛-J-Our Journey of Dalian Ends
- 计蒜客 16957 Skiing(2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 H)
- 计蒜客:2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛:Our Journey of Dalian Ends
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 C: Coconut
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A,C,F , H
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A banana