// intdfs(int u){ st[u] = true;// 标记一下,已经被搜u过了 // 如果当前点没有被搜过 int sum = 1,res = 0; for(int i = h[u];i!=-1;i=ne[i]){ int j = e[i]; if(!st[j]){ int s = dfs(j); res = max(res,s); sum+=s; } } res = max(res,n-sum); ans = min(ans,res); return sum; }
intmain(){ cin>>n; memset(h,-1,sizeof h); for(int i = 0;i<n-1;i++){ int a,b; cin>>a>>b; add(a,b),add(b,a); } dfs(1); cout<<ans<<endl; return0; }
constint N = 100010; // 到n的最短路,m条边 int n, m; // h表示起始点,e表示边,ne表示邻接表 int h[N], e[N], ne[N], idx; int d[N], q[N]; voidadd(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx++; } intbfs() { int hh = 0, tt = 0; q[0] = 1; memset(d, -1, sizeof d); d[1] = 0; while (hh <= tt) { int t = q[hh++]; for (int i = h[t]; i != -1; i = ne[i]) { int j = e[i]; if (d[j] == -1) { d[j] = d[t] + 1; q[++tt] = j; } } } return d[n]; } intmain() { cin >> n >> m; memset(h, -1, sizeof h); for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; add(a, b); } cout << bfs() << endl; return0; }
/* 3 3 1 2 2 3 1 3 1 2 3 */ #include<bits/stdc++.h> usingnamespace std; constint N = 100010; int n, m; int h[N], e[N], ne[N], idx; int q[N], d[N]; voidadd(int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx++; } booltopsort() { int hh = 0, tt = -1; for (int i = 1; i <= n; i++) { if (!d[i]) q[++tt] = i; } while (hh <= tt) { int t = q[hh++]; for (int i = h[t]; i != -1; i = ne[i]) { int j = e[i]; d[j]--; if (d[j] == 0) q[++tt] = j; } } return tt == n - 1; } intmain() { cin >> n >> m; memset(h, -1, sizeof h); for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; add(a, b); } if (topsort()) { for (int i = 0; i < n; i++) printf("%d ", q[i]); puts(""); } else puts("-1"); return0; }