不开 O2 AC ,开 O2 全 T ,蒟蒻不知道怎么回事,望大佬解答
#include <bits/stdc++.h>
using namespace std;
int n;
const int T = 5e4+10;
struct bian {
int from,to,next;
}edge[T*2];
int cnt = 0;
int head[T];
void add(int u,int v) {
cnt++;
edge[cnt].from = u;
edge[cnt].to = v;
edge[cnt].next = head[u];
head[u] = cnt;
}
int size[T];
int dp[T];
void dfs(int hao,int pre) {
if(hao != 1)
dp[hao] = dp[pre]+n-size[hao]*2;
int dian;
for(int i = head[hao];i;i = edge[i].next) {
dian = edge[i].to;
if(dian == pre)
continue;
dfs(dian,hao);
}
}
int ceng[T];
void dfs_ceng(int hao,int pre) {
ceng[hao] = ceng[pre]+1;
int dian;
for(int i = head[hao];i;i = edge[i].next) {
dian = edge[i].to;
if(dian == pre)
continue;
dfs_ceng(dian,hao);
}
}
int size_suan(int hao,int pre) {
size[hao] = 1;
int dian;
for(int i = head[hao];i;i = edge[i].next) {
dian = edge[i].to;
if(dian == pre)
continue;
size_suan(dian,hao);
size[hao] += size[dian];
}
}
int ans(int hao) {
int sum = 0;
for(int i = 1;i <= n;i++)
sum += (ceng[i]-1);
return sum;
}
int main() {
scanf("%d",&n);
int u,v;
for(int i = 1;i < n;i++) {
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
dfs_ceng(1,T-1);
dp[1] = ans(1);
size_suan(1,T-1);
dfs(1,T-1);
int hao = 0;
int minn = 2139062143;
for(int i = 1;i <= n;i++) {
if(dp[i] < minn) {
minn = dp[i];
hao = i;
}
}
printf("%d %d",hao,minn);
return 0;
}