Tree Cutting POJ - 2378(树形DP)

题意:有n个谷仓有n-1条路连接,问最少删除哪几个点才能使得删除点后得到的连通图的加点数不大于n/2.

分析:求树的重心的变形题,poj3107的简单版,一遍dfs从叶子到根转移找出找到以每个节点为根的子树的结点数,f[u]={ f[v1]+f[v2]+.....+f[vn] }+1;使得每棵子树节点数小于n/2,并且父节点得那个连通图节点数小于等于n/2,即n-f[u]<=n/2.

如果没有这样的点,输出NONE

Time limit     1000 ms

Memory limit     65536 kB

OS     Linux

Source      USACO 2004 December Silver

After Farmer John realized that Bessie had installed a "tree-shaped" network among his N (1 <= N <= 10,000) barns at an incredible cost, he sued Bessie to mitigate his losses. 

Bessie, feeling vindictive, decided to sabotage Farmer John's network by cutting power to one of the barns (thereby disrupting all the connections involving that barn). When Bessie does this, it breaks the network into smaller pieces, each of which retains full connectivity within itself. In order to be as disruptive as possible, Bessie wants to make sure that each of these pieces connects together no more than half the barns on FJ. 

Please help Bessie determine all of the barns that would be suitable to disconnect.

Input

* Line 1: A single integer, N. The barns are numbered 1..N. 

* Lines 2..N: Each line contains two integers X and Y and represents a connection between barns X and Y.

Output

* Lines 1..?: Each line contains a single integer, the number (from 1..N) of a barn whose removal splits the network into pieces each having at most half the original number of barns. Output the barns in increasing numerical order. If there are no suitable barns, the output should be a single line containing the word "NONE".

Sample Input

10
1 2
2 3
3 4
4 5
6 7
7 8
8 9
9 10
3 8

Sample Output

3
8

Hint

INPUT DETAILS: 

The set of connections in the input describes a "tree": it connects all the barns together and contains no cycles. 

OUTPUT DETAILS: 

If barn 3 or barn 8 is removed, then the remaining network will have one piece consisting of 5 barns and two pieces containing 2 barns. If any other barn is removed then at least one of the remaining pieces has size at least 6 (which is more than half of the original number of barns, 5).

题意:

给定一棵无向树,节点为n(n<=10000),问删除那些节点可以使得新图中的每一个连通分支的节点数都不超过小于n/2

思路:

树形dp,任意定跟,求出每个节点的儿子节点,每个点为根的子树的节点数dp[i],然后考察每一个点,如果n-dp[i]<=n/2,以及以i的每一个儿子为根的子树的节点数都dp[u]<=n/2,那么这个点就满足条件

/*题意:给了一棵节点数为n的树的对应关系,让判断去掉哪些
节点能使子数的大小小于等于n/2,并将符合条件的节点从小到
大输出,如果没有符合条件的节点,则输出 “NONE”。
思路:既然是让求哪些ji节点符合条件,可以用邻接表构建一个
图,然后用dfs找出每一个节点下连的图的da'x大小些节点符合
条件,将节点存入ans数组中。*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10010
using namespace std;
int n,s,e,first[N],book[N],ans[N];
struct node
{int x,y;
}que[2*N];
void add(int x,int y) //构建邻接表的函数
{que[e].x=x;que[e].y=first[y];first[y]=e++;
}
int dfs(int x)
{int num=0,sum=0;book[x]=1;int k=first[x],flag=0;while(k!=-1){if(!book[que[k].x]){num=dfs(que[k].x);sum+=num;if(num>n/2)   //x节点下的图的大小超过了n/2,不符合条件flag=1;}k=que[k].y;}if(n-sum-1>n/2)    //另一半是否小于等于n/2flag=1;if(!flag)ans[s++]=x;return sum+1;     //加上自己
}
int main()
{while(~scanf("%d",&n)){memset(first,-1,sizeof(first));//初始化memset(book,0,sizeof(book));s=e=0;   //有s个节点符合条件,e用邻接表表示无向图的大小int a,b;for(int i=1;i<n;i++){scanf("%d%d",&a,&b);add(a,b);       //构建邻接表add(b,a);       //无向图}a=dfs(1);        //从第一个点开始尝试if(s)      //有s个节点符合条件{sort(ans,ans+s);    //从小到大排序,输出for(int i=0;i<s;i++)printf("%d\n",ans[i]);}else    //没有符合条件的节点printf("NONE\n");}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零搭建分布式文件系统MinIO比FastDFS要更合适

前两天跟大家分享了一篇关于如何利用FastDFS组件来自建分布式文件系统的文章&#xff0c;有兴趣的朋友可以阅读下《用asp.net core结合fastdfs打造分布式文件存储系统》。通过留言发现大家虽然感兴趣&#xff0c;但是都觉得部署比较麻烦。的确&#xff0c;fastdfs的部署很繁琐&…

ember.js mysql_用AWS部署ember.jspadrino应用系列之一

aws提供了一年免费试用服务。这里&#xff0c;记录下&#xff0c;配置aws和部署开源cms程序——维卡币操盘手的整个过程。主要内容包括&#xff1a;EC2实例的创建和设置——ruby环境和nginx配置&#xff0c;部署ruby应用。RDS实例的创建和使用——mysql数据库参数组的使用。S3库…

[Java基础]方法引用

代码如下: package PrintablePack;public interface Printable {void printString(String s);}package PrintablePack;public class PrintableDemo {public static void main(String[] args){usePrintable(s-> System.out.println(s));usePrintable(System.out::println);/…

Maximum Sum UVA - 108(连续子序列最大和—变形之子矩阵最大和)

题目大意&#xff1a;给出 n*n 的矩阵&#xff0c;找每隔数字之和最大的子矩阵&#xff0c;输出最大和。 解题思路&#xff1a;枚举矩阵左上和右下的坐标&#xff0c;分别合并子矩阵的每列&#xff0c;使得二维转化为一维&#xff0c;然后利用连续子序列最大和去做就行。 Tim…

甲方爸爸,大概你要的是代码生成器吧?

作者&#xff1a;邹溪源&#xff0c;长沙资深互联网从业者&#xff0c;架构师社区特邀嘉宾&#xff01;一1&#xff09;有一天&#xff0c;我的朋友Y童鞋分享了他正在做的一个内部开源项目&#xff0c;这个开源项目从外表上看&#xff0c;跟目前市场上那些代码生成器本没有特别…

使用pdf.js来预览pdf文件_适用于Dynamics365与PowerApps的注释预览组件

powerapps/dynamics365适用的注释预览/批量下载组件自定义组件为预览功能原生预览支持的文件类型:图像,zip,音频,pdf支持批量打包注释为zip下载到本地使用浏览器预览支持:音频,视频,图像,pdf,文本,xml,json等,理论上只需要浏览器支持打开的文件类型,均可预览使用方法:1.导入解决…

[PAT乙级]1001 害死人不偿命的(3n+1)猜想

卡拉兹(Callatz)猜想&#xff1a; 对任何一个正整数 n&#xff0c;如果它是偶数&#xff0c;那么把它砍掉一半&#xff1b;如果它是奇数&#xff0c;那么把 (3n1) 砍掉一半。这样一直反复砍下去&#xff0c;最后一定在某一步得到 n1。卡拉兹在 1950 年的世界数学家大会上公布了…

Sticks UVA - 307(切木棍 线性区间dp,线性dp,区间思想。)

题目大意&#xff1a;将n节木棒接成m个长度相等的木条&#xff0c;要求木条的长度尽可能的短 Time limit 3000 ms OS Linux George took sticks of the same length and cut them randomly until all parts became at most 50 units long. Now he wants to return st…

消息队列,我只选RabbitMQ!

高并发架构是架构师的必修课&#xff0c;而消息队列&#xff0c;则是王冠上最闪亮的那颗明珠&#xff01;能否驾驭消息队列这款高并发神器&#xff0c;亦成为架构师的试金石。作为专注.NET领域十多年的老架构师&#xff0c;下面从队列本质、技术选型、实战应用三个方面&#xf…

python比较三个数_python经典练习题(三)

人生苦短&#xff0c;你需要python继续学习python第一题题目&#xff1a;输入三个整数 x,y,z&#xff0c;请把这三个数由小到大输出不借助sortnum1 int(input("请输入第一个数"))num2 int(input("请输入第二个数"))num3 int(input("请输入第三个数&qu…

[PAT乙级]1002 写出这个数

读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10​100​​。 输出格式&#xff1a; 在一行内输出 n 的各位数字之和的…

ROADS POJ - 1724(限制条件的最短路)【邻接表+深搜】

思路&#xff1a;先说下题意&#xff0c;题意第一行给了一个k,代表你有k的钱数&#xff0c;下一行有一个n,代表n个点&#xff0c;然后一个m&#xff0c;代表m条边&#xff0c;然后接下来m行,每行有四个数&#xff0c;分别代表起点、终点、路径长度和要花费的钱数&#xff0c;题…

使用Jexus 容器化您的 Blazor 应用程序

在本文中&#xff0c;我们将介绍如何将 Blazor 应用程序放入Jexus 容器以进行开发和部署。我们将使用 .NET Core CLI&#xff0c;因此无论平台如何&#xff0c;使用的命令都将是相同的。Blazor 托管模型Blazor 有两个托管模型&#xff0c;它们的要求不同&#xff0c;本文主要基…

mysql中临时修改参数用什么关键字_postgresql 中的参数查看和修改方式

1.查看参数文件的位置使用show 命令查看,比较常用的show config_file.此还可以查看pg_settings数据字典.test# show config_file;config_file------------------------------/data/pgdata/postgresql.conf(1 row)test# show hba_filetest-# ;hba_file-------------------------…

[PAT乙级]1004 成绩排名

读入 n&#xff08;>0&#xff09;名学生的姓名、学号、成绩&#xff0c;分别输出成绩最高和成绩最低学生的姓名和学号。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;格式为 第 1 行&#xff1a;正整数 n 第 2 行&#xff1a;第 1 个学生的姓名 学号…

圆桌会议 HDU - 1214(规律+模拟队列)

Time limit 1000 ms Memory limit 32768 kB OS Windows Source 杭电ACM省赛集训队选拔赛之热身赛 HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论…

【A】 Natasha3.0 引擎亮给你,请你来折腾

文章转载授权级别&#xff1a;A一 、 引言Natasha 距离上个 2. 版本大概有1个月了&#xff0c;在4月份里我把模板与引擎进行了重构&#xff0c;旨在更抽象、规范、合理&#xff0c;方便其他人参与开源、定制。接下来我将从 引擎的结构 、类库的使用及新热的 Source Generators …

linux ps mysql_linux系统中ps指令使用详解

在linux系统作为和unix和ubuntu相同的系统&#xff0c;ps指令经常被用到查看程序进程的状态&#xff0c;但是这个指令具体怎么用您会吗&#xff1f;本文就以centos为例&#xff0c;结合项目中服务器的实际应用&#xff0c;给大家讲解下ps指令的用法。一、参数a——显示现行终端…

ASP.NET Core在CentOS上的最小化部署实践

引言本文从Linux小白的视角&#xff0c; 在CentOS服务器上搭建一个Nginx-Powered AspNet Core Web准生产应用。在开始之前&#xff0c;我们还是重温一下部署原理&#xff0c;正如你所常见的.Net Core 部署图&#xff1a;在Linux上部署.Net Core App最好的方式是使用Kestrel 服务…

Pearls POJ - 1260(区间记忆化搜索)

题意&#xff1a; n件物品&#xff0c;给出数量和价格&#xff0c;&#xff08;注意数量和价格都是升序给出的这个是能DP的关键&#xff09;&#xff0c;要买掉所以商品 对于每类物品&#xff0c;所需要的价格是(a[i]10)*p[i] &#xff0c;即要多买10件&#xff0c;也可以把价格…