zoukankan      html  css  js  c++  java
  • hdu 5444 Elven Postman长春网赛

    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]='';
    	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]='';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
    ",dp[j].s);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    入梦初醒
    工作杂记
    终于用上双屏了!
    工作杂记(ii)
    2008
    $this>$a与$this>aPHP学习笔记
    明天要开工了
    好的程序员如何被发现,如何证明你简历中所标榜的那些精通和能力?
    架构师的思考:性能优化到何处为止?选择的原则
    极具挑战的超级智力测验题
  • 原文地址:https://www.cnblogs.com/bitch1319453/p/4805511.html
Copyright © 2011-2022 走看看