1 条题解

  • 0
    @ 2024-9-9 16:41:35

    C++ :

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    int n,nn;
    int u,v,shu,first[1000010];
    struct bian
    {
        int v,next;
    }o[3000010];
    inline void add(int u,int v)
    {
     	 o[++shu].v=v;
     	 o[shu].next=first[u];
     	 first[u]=shu;
    }
    bool flag[1000010];
    int sum[1000010],max[1000010],ans[1000010];
    inline void build(int x)
    {
    	flag[x]=1;
    	for(int i=first[x];i;i=o[i].next)
    		if(!flag[o[i].v])
    		{
    			build(o[i].v);
    			sum[x]+=sum[o[i].v];
    			if(max[x]<sum[o[i].v])
    				max[x]=sum[o[i].v];
    		}
    	++sum[x];
    	if(max[x]<=nn&&n-sum[x]<=nn)
    		ans[++ans[0]]=x;
    }
    int main()
    {
    	//freopen("tree.in","r",stdin);
    	//freopen("tree.out","w",stdout);
    	scanf("%d",&n);
    	for(int i=1;i<n;++i)
    	{
    		scanf("%d%d",&u,&v);
    		add(u,v);
    		add(v,u);
    	}
    	nn=n>>1;
    	build(1);
    	if(ans[0])
    	{
    		std::sort(ans+1,ans+ans[0]+1);
    		for(int i=1;i<=ans[0];++i)
    		    printf("%d\n",ans[i]);
    	}
    	else
    	    puts("NONE");
    //	getchar();
    //	getchar();
    //	getchar();
    //	getchar();
    }
    
    
    • 1

    信息

    ID
    516
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者