博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树形动态规划 fjutoj-2131 第四集,聚集城市
阅读量:6840 次
发布时间:2019-06-26

本文共 1719 字,大约阅读时间需要 5 分钟。

第四集,聚集城市

TimeLimit:1000MS  MemoryLimit:128MB
64-bit integer IO format:
%lld
 
Problem Description

在小A解读完手机信息后,得到了特工们的位置情报以及他们最近将会又一次聚会(除了谈论了关于抓捕小A和小C的事情外,主要谈论了关于走私事情…)

因为小C原本是他们的内部人员,所以她知道这个组织有一个习惯,即特工们每次选择聚会的城市,他们都会选择使所有组员所在市距离聚会城市的路程的和最小的城市,而且每个城市最多有一名特工

现在,小A知道了特工们的所在位置,小A根据城市地图绘制了一副简易图,图的如下信息:

1,有一副n个节点的双向无环图,每个节点表示一个城市。

2,每条边默认距离为1

3,有m个城市里住了他们的组员。

根据这些信息,得出一个城市编号X1<=X<=n),使X到这m个城市的距离的和最小。

小A知道这是他反击的机会,他需要证据,他不想在和小C一直过着颠簸流离的逃亡生活。他需要获取更多关于走私的信息,他才有足够多的证据端了这个组织.因此,他必须找到这个聚会城市、

 

Input

有多组测试案例

第一行输入两个正整数n和m。(2<n<=10000,1<m<=n)

第二行接下来输入m个正整数mi,表示城市mi有1名特工(mi!=mj,i!=j)、

接下来有n-1行,每一行输入两个正整数a和b,表示城市a和城市b相连、 

 

Output

对于每组测试案例,输出符合的城市编号,如果有多个城市符合要求,则输出编号最小的那个城市、

SampleInput
8 44 3 6 7 4 75 61 81 37 55 25 3
SampleOutput
5

 思路:先以1或任意节点为根节点深度优先搜索计算出根结点到所有需要到达点的距离,并且用数组cot[]记录各个点为根节点的子树有多少个含有所需要到达点的数量。

再次进行深搜更新dp[]    状态转移方程dp[to]=dp[now]+m-2*cot[to]

最后遍历一遍数组dp[]寻找最大值出现的位置即可

1 #include
2 #include
3 #include
4 using namespace std; 5 const int maxn = 10000+5; 6 vector
e[maxn]; 7 int has[maxn],vis[maxn],minLen[maxn],cot[maxn],dp[maxn],n,m,num; 8 //has:记录哪几个城市需要到达 9 //vis:记录是否有搜索过10 //minLen:记录1到所有需要到达城市的最小距离11 //cot:记录儿子有多少个需要到达的城市12 13 //初始化14 void init()15 {16 memset(vis,0,sizeof(vis));17 memset(has,0,sizeof(has));18 memset(cot,0,sizeof(cot));19 memset(minLen,0,sizeof(minLen));20 memset(dp,0,sizeof(dp));21 for(int i= 1 ; i<=n; i++)22 e[i].clear();23 }24 25 //计算最短长度和每个点儿子有多少个需要到达的城市26 int dfs1(int now,int dep)27 {28 int temp=0;29 if(has[now])30 temp=1;31 minLen[now]=dep;32 int len=e[now].size();33 for(int i=0; i

 

转载于:https://www.cnblogs.com/xcantaloupe/p/7341413.html

你可能感兴趣的文章
js观察者模式
查看>>
python画图matplotlib基础笔记
查看>>
windows10远程桌面连接及问题解决
查看>>
JavaScript学习笔记(七)——函数的定义与调用
查看>>
什么是守护线程?
查看>>
vue ts prop
查看>>
Differentiation 导数和变化率
查看>>
UStore-自定义JDF文件格式输出
查看>>
(转)理解android.intent.action.MAIN 与 android.intent.category.LAUNCHER
查看>>
2016"百度星"资格赛1002 大数相加
查看>>
Asp.net core 学习笔记 ( Web Api )
查看>>
构造函数(包含this关键字的简单应用)
查看>>
最烦人的正则表达式记忆口诀
查看>>
leetcode Merge Two Sorted Lists
查看>>
[oracle]常用SQL汇总
查看>>
Struts2_day04--课程介绍_Struts2拦截器概述&底层原理_重要的概念
查看>>
我的Java设计模式-工厂方法模式
查看>>
添加支付宝支付按钮,实现捐赠本站
查看>>
SqlDataReader生成动态Lambda表达式
查看>>
leetcode897
查看>>