求助!!!
查看原帖
求助!!!
112703
与世无争楼主2020/10/29 23:56

麻烦看下哪错了,为什么第六组数据直接挂了。 @AC_duckling @风之城008 @famvics @ACmachineoier @Zeda_ @空气树

#include<cstdio>
#include<vector>
using namespace std;
inline int read() {
	register int n=0;
	register char c=getchar();
	while (c<'0'||c>'9') c=getchar();
	while (c>='0'&&c<='9') n=n*10+c-'0',c=getchar();
	return n;
}
const int N=1000005;
vector <int> v[N];
int n,from,to,f[N],sum,ans,maxn,son[N];
bool visit[N];
void DFS(int x,int s) {
	f[x]=s;
	visit[x]=1;
	sum+=s;
	for (int i=0; i<v[x].size(); i++) {
		if (visit[v[x][i]]) continue;
		DFS(v[x][i],s+1);
		son[x]+=son[v[x][i]]+1;
	}
}
void dfs(int x,int s) {
	visit[x]=1;
	if (maxn<s) {
		maxn=s;
		ans=x;
	}
	for (int i=0; i<v[x].size(); i++) {
		if (visit[v[x][i]]) continue;
		int now=v[x][i],t1=son[x],t2=son[now];
		son[now]=son[x];
		son[x]-=son[now]+1;
		dfs(now,s+t1-t2-t2-1);
		son[x]=t1;
		son[now]=t2;
	}
}
int main() {
	n=read();
	for (int i=1; i<n; i++) {
		from=read();
		to=read();
		v[from].push_back(to);
		v[to].push_back(from);
	}
	DFS(1,0);
	for (int i=1; i<=n; i++) visit[i]=0;
	dfs(1,sum);
	printf("%d\n",ans);
	return 0;
}
//By与世无争

2020/10/29 23:56
加载中...