AtCoder Beginner Contest 067(CD)

C - Splitting Pile

思路:预处理前后缀,暴力即可。

D - Fennec VS. Snuke

思路:考虑所有点到 1 , n 1,n 1,n的距离,谁的距离较小这个点就属于谁。

距离相同属于先手,因为先手可以先走一步。

所以最后统计属于1的点数 s s s,和属于 n n n的点数 n − s n-s ns.

s > n − s s>n-s s>ns则先手赢,反之后手胜。

如果 s = n − s s=n-s s=ns是后手胜,因为先手不能再走了。

void dfs(int u,int fa){
	dis[op][u]=dis[op][fa]+1;
	for(int v:e[u]){
		if(v!=fa) dfs(v,u);
 	}
}
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		e[u].pb(v),e[v].pb(u);
	} 
	dfs(1,0);
	op=1;
	dfs(n,0);
	int s=0;
	for(int i=1;i<=n;i++) s+=dis[0][i]<=dis[1][i];
	puts(s>n-s?"Fennec":"Snuke");