首页 > 代码库 > Codeforces 813C The Tag Game 贪心

Codeforces 813C The Tag Game 贪心

#include <bits/stdc++.h>
using namespace std;
const int N=4e5+20;
const int inf=2e6;
int n,x,par[N],dep[N],dp[N],ans;//dp[i] ×óê÷iμ?ò??úμ?μ?×?′óé??è
//ìaòa:n???áμ?μ?ê÷,n<=2e5,Alice?ú?áμ?1,Bob?ú?áμ?x,??′??éò?ò??ˉμ??àáúμ??áμ??ò??2??ˉ.
//Aliceò??ˉμ?bob?ù?ú?áμ?Aliceê¤à?,Alice?????ì??ê¤bob??ííμ??áê?,?ê×üμ?2ù×÷êy?

//Alice???¨íùbob?ù?úμ?×?,Bob??íí?áê?,???üíùé??è??μ?ò?×ó?áμ?×?è?oó2??ˉ. 
//?áμ?1é??è?a0,x?áμ?é??è?ad,bob×??àíùé?×?(d-1)/2 ?úμ??3??ò??áμ?,?ú?aD?×óê÷?D????é??è×?′óμ?ò??úμ??′?é 
vector<int> e[N]; 
void dfs(int u,int fa,int d)
{
	dep[u]=dp[u]=d;
	par[u]=fa;//×??è 
	for(int i=0;i<e[u].size();i++)
	{
		int v=e[u][i];
		if(v==fa)	continue;
		dfs(v,u,d+1);
		dp[u]=max(dp[u],dp[v]);
	}	

}

int main()
{
	while(cin>>n>>x)
	{
		ans=0;
		for(int i=1;i<=n;i++)
			dp[i]=0,e[i].clear();
		memset(dep,0,sizeof(dep));
		int u,v;
		for(int i=1;i<=n-1;i++)
		{
			scanf("%d%d",&u,&v);
			e[u].push_back(v);
			e[v].push_back(u);
		}
		dfs(1,-1,0);
		ans=dp[x]*2;
		int D=(dep[x]-1)/2;
		while(D)//x×??à?òé?×?D′?,×?oóò??áμ????¨?aD???Dμ??3ò??? 
		{
			x=par[x];
			ans=max(ans,dp[x]*2);
			D--;
		}
		cout<<ans<<endl;
	}
	return 0;
}

  

Codeforces 813C The Tag Game 贪心