【NOIP2015提高组】信息传递
https://www.luogu.org/problem/show?pid=2661
傻逼图论题,把我写成傻逼了。
DFS找环,每个结点第二次访问时更新答案。
但是图会有几个连通块,所以要分开讨论。
#include <iostream> #include <cstring> #include <cmath> #define maxn 200005 using namespace std; int n, nxt[maxn]; int dfn[maxn], color[maxn], ans = 0x7f7f7f7f; void dfs(int v, int d, int c) { if (dfn[v]) { if(color[v] == c) ans = min(ans, d - dfn[v]); } else { dfn[v] = d; color[v] = c; dfs(nxt[v], d + 1, c); } } int main() { ios::sync_with_stdio(false); cin >> n; for (int i = 1; i <= n; i++) cin >> nxt[i]; for (int i = 1; i <= n; i++) { if (!dfn[i]) dfs(i, 1, i); } cout << ans; return 0; }