码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5444 Elven Postman长春网赛

时间:2015-09-13 21:25:41      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

5444 2333

建二插排序树,dfs一遍,之后o(1)应对查询

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=1008;
struct fuck{
	int left,right;
}poi[maxn];
int tol;
struct shit{
	char s[maxn];
	int idx;
}dp[maxn];
void dfs(int u,int x)
{
	if(x<u&&poi[u].left==-1)
	{
		poi[u].left=x;
		poi[x].left=-1;
		poi[x].right=-1;
		return;
	}
	if(x>u&&poi[u].right==-1)
	{
		poi[u].right=x;
		poi[x].left=-1;
		poi[x].right=-1;
		return;
	}
	if(x<u)	dfs(poi[u].left,x);
	if(x>u)	dfs(poi[u].right,x);
}
void fuckdfs(int u,bool flag,int fa)
{
	strcpy(dp[u].s,dp[fa].s);
	if(flag==true)
	dp[u].s[dp[fa].idx]=‘E‘;
	else
	dp[u].s[dp[fa].idx]=‘W‘;
	dp[u].idx=dp[fa].idx+1;
	dp[u].s[dp[u].idx]=‘\0‘;
	if(poi[u].left!=-1)
	fuckdfs(poi[u].left,true,u);
	if(poi[u].right!=-1)
	fuckdfs(poi[u].right,false,u);
}
int main()
{
	int i,j,n,m,t,x;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		scanf("%d",&x);
		int root=x;
		poi[root].left=-1;poi[root].right=-1;
		dp[root].s[0]=‘\0‘;dp[root].idx=0;
		for(i=2;i<=n;i++)
		{
			scanf("%d",&x);
			dfs(root,x); 
		}
		if(poi[root].left!=-1)
		fuckdfs(poi[root].left,true,root);
		if(poi[root].right!=-1)
		fuckdfs(poi[root].right,false,root);
		scanf("%d",&x);
		while(x--)
		{
			scanf("%d",&j);
			printf("%s\n",dp[j].s);
		}
	}
	return 0;
}

 

hdu 5444 Elven Postman长春网赛

标签:

原文地址:http://www.cnblogs.com/bitch1319453/p/4805511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!