萌新袜子刚学oi,简单 Tarjan 已过样例全 WA 求调

P3225 [HNOI2012] 矿场搭建

```cpp #include <bits/stdc++.h> #define int long long using namespace std; const int N = 500005; int n, id, head[N], tot, cnt, dfn[N], low[N], ans1, ans2 = 1, rt, gg, num, gnum, root; bool flag[N], cut[N]; int maxn = -1; struct jc{ int to, net; }e[N]; void add(int x, int y) { e[++tot].to = y; e[tot].net = head[x]; head[x] = tot; } void Tarjan(int x, int f) { dfn[x] = low[x] = ++cnt; for (int i = head[x]; i; i = e[i].net) { int y = e[i].to; if (!dfn[y]) { Tarjan(y, x); low[x] = min(low[x], low[y]); if (low[y] >= dfn[x]) { if (x != root) cut[x] = 1; else rt++; } } else if (y != f) low[x] = min(low[x], dfn[y]); } } void dfs(int x) { flag[x] = gg; if (cut[x]) return; num++; for (int i = head[x]; i; i = e[i].net) { int y = e[i].to; if (cut[y] && flag[y] != gg) { gnum++; flag[y] = gg; } if (!flag[y]) dfs(y); } } signed main() { while(cin >> n && n != 0) { memset(head, 0, sizeof(head)); memset(flag, 0, sizeof(flag)); memset(dfn, 0, sizeof(dfn)); memset(low, 0, sizeof(low)); memset(cut, 0, sizeof(cut)); ans1 = tot = cnt = 0; ans2 = 1; id++; for (int i = 1; i <= n; i++) { int x, y; cin >> x >> y; add(x, y); add(y, x); maxn = max(maxn, max(x, y)); } for (int i = 1; i <= maxn; i++) { if (!dfn[i]) { root = i; Tarjan(i, 0); if (rt >= 2) cut[i] = 1; rt = 0; } } for (int i = 1; i <= maxn; i++) { if (!flag[i] && !cut[i]) { ++gg; num = gnum = 0; dfs(i); if (!gnum) { cout << num << '\n'; ans1 += 2; ans2 *= (num - 1) * num / 2; } else if (gnum == 1) { ans1 += 1; ans2 *= num; } } } cout << "Case " << id << ": "; cout << ans1 << ' ' << ans2 << '\n'; } return 0; } ```
by kaceqwq @ 2023-03-28 19:11:50


@[kaceqwq](/user/527992) 怎么 flag 是个bool 哦,坤坤
by Acerakoi @ 2023-03-28 19:47:17


@[kaceqwq](/user/527992) 把 `bool flag[N], cut[N];` 改成 `int flag[N], cut[N];` 就有 80 高分
by Acerakoi @ 2023-04-11 19:58:05


@[kaceqwq](/user/527992) ` cout << num << '\n';` 调试没删, 90pts
by Acerakoi @ 2023-04-11 20:07:00


@[Acerkaio](/user/514850) 感谢大佬
by kaceqwq @ 2023-04-11 20:11:41


@[kaceqwq](/user/527992) IIIIIIII KKKKKNNNOOWWWW THTHTHTHTHAT!!!!!!!!!!!!!!!!!!!!!! it is "maxn = 0;";
by Acerakoi @ 2023-04-13 19:01:07


@[kaceqwq](/user/527992) if you delete what in front of the last case. it will run rightly. so : there is something wrong on storing.
by Acerakoi @ 2023-04-13 19:01:41


thanks
by kaceqwq @ 2023-04-13 19:03:48


@[kaceqwq](/user/527992) 可以在机房当面说的其实
by Acerakoi @ 2023-04-13 19:05:12


|