POJ3107 Godfather (树形DP)
题意:求树的重心
题解:先跑一遍dfs 预处理出这种遍历方式每个节点的儿子(含自己)的数
再跑一遍 每个点的值就是他所有儿子中取一个最大值 再和它父亲这个方向比较一下
又被卡常了 vector一直tle 需要用前向星....
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string.h>
using namespace std; int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} struct node
{
int no, to, nex;
}E[]; int n, rt;
int du[];
int head[];
int son[];
int dp[]; int dfs1(int x, int fa)
{
son[x] = ;
int c = head[x];
for(int i = c; i; i = E[i].nex)
{
int c = E[i].to;
if(c == fa) continue; son[x] += dfs1(c, x);
}
return son[x];
} void dfs2(int x, int fa)
{
dp[x] = n - son[x];
int c = head[x];
for(int i = c; i; i = E[i].nex)
{
int c = E[i].to;
if(c == fa) continue; dp[x] = max(dp[x], son[c]);
dfs2(c, x);
}
} int main()
{
while(~scanf("%d", &n))
{
for(int i = ; i <= n; i++) du[i] = son[i] = dp[i] = head[i] = ; int cn = ;
for(int i = ; i < n; i++)
{
int u, v;
u = read(); v = read();
E[++cn].no = u;
E[cn].to = v;
E[cn].nex = head[u];
head[u] = cn; E[++cn].no = v;
E[cn].to = u;
E[cn].nex = head[v];
head[v] = cn;
du[u]++;
du[v]++;
} for(int i = ; i <= n; i++)
if(du[i] == )
{
rt = i;
break;
} int o = dfs1(rt, -);
dfs2(rt, -); int ans = n + ;
int cnt = ;
for(int i = ; i <= n; i++) ans = min(ans, dp[i]);
for(int i = ; i <= n; i++)
if(dp[i] == ans) cnt++; for(int i = ; i <= n; i++)
{
if(dp[i] == ans)
{
if(cnt == )
{
printf("%d\n", i);
break;
}
else printf("%d ", i);
cnt--;
}
}
}
return ;
}
POJ3107 Godfather (树形DP)的更多相关文章
- POJ 3107.Godfather 树形dp
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7536 Accepted: 2659 Descrip ...
- [poj3107/poj2378]Godfather/Tree Cutting树形dp
题意:求树的重心(删除该点后子树最大的最小) 解题关键:想树的结构,删去某个点后只剩下它的子树和原树-此树所形成的数,然后第一次dp求每个子树的节点个数,第二次dp求解答案即可. 此题一开始一直T,后 ...
- POJ 1655 BalanceAct 3107 Godfather (树的重心)(树形DP)
参考网址:http://blog.csdn.net/acdreamers/article/details/16905653 树的重心的定义: 树的重心也叫树的质心.找到一个点,其所有的子树中最大的 ...
- poj3107(树的重心,树形dp)
题目链接:https://vjudge.net/problem/POJ-3107 题意:求树的可能的重心,升序输出. 思路:因为学树形dp之前学过点分治了,而点分治的前提是求树的重心,所以这题就简单水 ...
- 【树形dp】Godfather
[POJ3107]Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7212 Accepted: 253 ...
- [poj3107]Godfather_树形dp_树的重心
Godfather poj-3107 题目大意:求树的重心裸题. 注释:n<=50000. 想法:我们尝试用树形dp求树的重心,关于树的重心的定义在题目中给的很明确.关于这道题,我们邻接矩阵存不 ...
- 树形 DP 总结
树形 DP 总结 本文转自:http://blog.csdn.net/angon823/article/details/52334548 介绍 1.什么是树型动态规划 顾名思义,树型动态规划就是在“树 ...
- 树形DP
切题ing!!!!! HDU 2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...
- 【转】【DP_树形DP专辑】【9月9最新更新】【from zeroclock's blog】
树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树.三叉树.静态搜索树.AV ...
随机推荐
- Java集合类汇总记录--JDK篇
接口类图 Java Collection由两套并行的接口组成,一套是Collection接口,一套是Map接口.例如以下图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...
- Android之——jni通用工具方法
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47002207 1.将java字符串转化为c++字符串 /** *工具方法 *将ja ...
- google免费DNSserver好用不?
中国的网络实在不行,网速一直就是令人诟病. 比韩日那是差太多了,可是相比非洲还是不错.可是这根本无法满足国人的上网需求.于是大家都想破了脑袋想提高网速.这不方法来了么? 笔者在网上找了几种方法关于怎样 ...
- 如何理解scrapy Selector
1 scrapy Selector是什么 Selector对象本质上是对DOM tree的子树的抽象,这种抽象的目的是用于定位我们感兴趣的node.比如某次http response是一棵完整的DOM ...
- [DevExpress]DevExpress的安装与使用
一.下载安装文件 依据自己的须要选择不同的版本号.下面为15.1 安装时选择自己须要的模块进行安装,之后进行激活,购买授权或者"其它方式". 二.安装完 在VSIDE工具栏会添加下 ...
- 2010–2011, NEERC, Northern Subregional C.Commuting Functions
C.Commuting Functions 由于要求答案字典序最小,我们肯定希望从g(1)开始对函数g进行赋值,于是又公式f(g(x))=g(f(x)) 设f(x)=i 我们推导出 由于f是双射,当i ...
- 洛谷P2827 蚯蚓——思路题
题目:https://www.luogu.org/problemnew/show/P2827 思路... 用优先队列模拟做的话,时间主要消耗在每次的排序上: 能不能不要每次排序呢? 关注先后被砍的两条 ...
- bzoj4269
http://www.lydsy.com/JudgeOnline/problem.php?id=4269 裸线性基,一个数取多次就是没取... 又有了些新的理解:a数组的前now个元素是基底,也就是可 ...
- Eclipse 使用Anaconda python 解释器
问题: ubuntu16.04 Anaconda 安装成功 Eclispe 写Python代码 无法使用 (pandas库等) 原因: Eclispe 此时的python解释器==>用的并不是A ...
- 关于file文件操作的头文件 【LINUX】 (转载)
转自:http://blog.csdn.net/figo77ll/article/details/3156052 Linux下如果要对文件进行读取访问,需要包含至少以下两个头文件: #inlcude ...