Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

baneHunter贴一个

Posted by 1340502116 at 2016-01-30 15:37:31 on Problem 1470
#include"cstdio"
#include"cstring"
#include"vector"
using namespace std;
const int MAXN=1005;
int V;
vector<int> G[MAXN];
int par[MAXN];
void prep()
{
	for(int i=0;i<=MAXN;i++)
	{
		par[i]=i;
	}
}
int fnd(int x)
{
	if(par[x]==x)
		return x;
	return par[x]=fnd(par[x]);
}
void unite(int father,int son)
{
	par[son]=fnd(father);
}
int fa[MAXN],dep[MAXN];
void dfs(int u,int father,int d)
{
	fa[u]=father,dep[u]=d;
	for(int i=0;i<G[u].size();i++)
		 dfs(G[u][i],u,d+1);
}
int lca[MAXN];
int LCA(int u,int v)
{
	while(dep[u]>dep[v])	u=fa[u];
	while(dep[v]>dep[u])	v=fa[v];
	while(u!=v)
	{
		u=fa[u];
		v=fa[v];
	}
	return u;
}
int main()
{
	while(scanf("%d",&V)!=EOF)
	{
		for(int i=0;i<=V;i++)	G[i].clear();
		prep();
		memset(lca,0,sizeof(lca));
		memset(dep,0,sizeof(dep));
		memset(fa,0,sizeof(fa));
		for(int i=0;i<V;i++)
		{
			int u,t;
			scanf("%d:(%d)",&u,&t);
			while(t--)
			{
				int v;
				scanf("%d",&v);
				G[u].push_back(v);
				unite(u,v);
			}
		}
		int root=fnd(1);
		dfs(root,-1,0);
		int Q;
		scanf("%d",&Q);
		while(true)
		{
			char ch=getchar();
			if(ch=='(')
			{
				int u,v;
				scanf("%d %d",&u,&v);
				int a=LCA(u,v);
				lca[a]++;
				getchar();
				Q--;
			}
			if(Q==0)	break;
		}
		for(int i=0;i<=V;i++)
		{
			if(lca[i]!=0)	printf("%d:%d\n",i,lca[i]);
		}
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator