• hdu 3290 (简单dfs)


    题意:没有儿子的节点所结苹果数是节点的编号,有儿子的所结苹果是儿子数量(k+1)/2个,求跟节点的苹果数

    直接递归一下,先求出所有儿子的苹果树,在排序,,刚开始以为1就是根节点,根节点不确定,,




    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    const int N=20010;
    int w[N],vis[N],head[N],num,p[N];
    struct edge
    {
    	int st,ed,next;
    }e[N*4];
    int cmp(void const *a,void const *b)
    {
    	return *(int *)a-*(int *)b;
    }
    void addedge(int x,int y)
    {
    	e[num].st=x;e[num].ed=y;e[num].next=head[x];head[x]=num++;
    }
    int dfs(int u)
    {
    	w[u]=u;
    	int i,j=0;
    	for(i=head[u];i!=-1;i=e[i].next)
    		dfs(e[i].ed);
    	for(i=head[u];i!=-1;i=e[i].next)
    		p[j++]=w[e[i].ed];
    	if(j>0)
    	{
    	  qsort(p,j,sizeof(p[0]),cmp);
    	  w[u]=p[(j+1)/2-1];
    	}
    	return w[u];
    }
    int main()
    {
    	int i,x,n,m;
    	while(scanf("%d",&n)!=-1)
    	{
    		memset(head,-1,sizeof(head));
    		num=0;
    		memset(w,0,sizeof(w));
    		memset(vis,0,sizeof(vis));
    		for(i=1;i<=n;i++)
    		{
    			scanf("%d",&m);
    			while(m--)
    			{
    				scanf("%d",&x);
    				addedge(i,x);
    				vis[x]=1;
    			}
    		}
    		for(i=1;i<=n;i++)
    		{
    			if(vis[i]==0)
    		 printf("%d
    ",dfs(i));
    		}
    	}
    	return 0;
    }






  • 相关阅读:
    指针的学习
    (转)c & c++内存分配
    C++实现String
    c& c++笔试题
    appium python api收集
    公司python入职培训流程
    app端性能测试笔记
    h5 测试关注点
    robot framework 牛刀一试
    adb 安装apk 报错:Failure [INSTALL_FAILED_INVALID_URI]
  • 原文地址:https://www.cnblogs.com/riskyer/p/3310518.html
Copyright © 2020-2023  润新知