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;
    }
    
  • 相关阅读:
    electron入坑指南
    记CSS格式化上下文
    Ruby安装Scss
    向量
    产生指定范围的随机数
    纯CSS 图片演示
    socket 函数
    C++网络套接字编程TCP和UDP实例
    技巧收藏
    伤心啊
  • 原文地址:https://www.cnblogs.com/bitch1319453/p/4805511.html
Copyright © 2011-2022 走看看