intbfs(string state) { queue<string> q; unordered_map<string, int> d; q.push(state); d[state] = 0; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; string end = "12345678x"; while(q.size()) { auto t = q.front(); q.pop(); if (t == end) return d[t]; int distance = d[t]; int k = t.find('x'); int x = k / 3, y = k % 3; for (int i = 0; i < 4; i ++ ) { int a = x + dx[i], b = y + dy[i]; if (a >= 0 && a < 3 && b >= 0 && b < 3) { swap(t[a * 3 + b], t[k]); if (!d.count(t)) { q.push(t); d[t] = distance + 1; } swap(t[a * 3 + b], t[k]); } } } return-1; }
intmain() { char s[2]; string state; for (int i = 0; i < 9; i ++ ) { cin >> s; state += *s; } cout << bfs(state) << endl; return0; }
constint N = 100010, M = N * 2; int h[N], e[M], ne[M], idx; int n, ans = N; bool st[N];
voidadd(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ; }
intdfs(int u) { st[u] = true; int size = 0, sum = 0; for (int i = h[u]; i != -1; i = ne[i]) { int j = e[i]; if (st[j]) continue; int s= dfs(j); size = max(size, s); sum += s; } size = max(size, n - sum - 1); ans = min(ans, size); return sum + 1; }
intmain() { scanf("%d", &n); memset(h, -1, sizeof h); for (int i = 0; i < n - 1; i ++ ) { int a, b; scanf("%d%d", &a, &b); add(a, b), add(b,a ); } dfs(1); cout << ans << endl; return0; }