poj 1655
这道题我有很多要说
首先是基础的解题思路:
树形dp(dfs)用dp[i]保存以i为根结点的子树的大小(含i)
balance(i)=max{n-dp[i],max{dp[j]}(j is a son of i}
O(n)
这题我RE了5次,WA了5次,AC来之不易啊
反观10次unACs(我承认是我创的,自己能看懂),发现只有一个问题:
清零
短短3行字,调了我2小时!!!以后注意吧。。。
吐槽多了,赶快上代码:
#include<cstdio>
#include<cstring>
using namespace std;
int n,dp[20100],to[40100],top,next[40100],first[20100];
int min=1<<20,ans=-1;
bool vis[20100]={0};
void solve(int i){
dp[i]=1;vis[i]=1;
int cur=0;
for(int j=first[i];j!=-1;j=next[j])if(!vis[to[j]]){
solve(to[j]);
if(dp[to[j]]>cur)cur=dp[to[j]];
dp[i]+=dp[to[j]];
}
if(n-dp[i]>cur)cur=n-dp[i];
// printf("%d %d\n",i,cur);
if(cur<min || cur==min && i<ans){
min=cur;
ans=i;
}
return;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
min=1<<20;ans=-1; //没打时WA
top=0; //没打时RE
memset(first,-1,sizeof(first));
memset(vis,0,sizeof(vis)); //没打时WA
memset(dp,0,sizeof(dp)); //可打可不打
scanf("%d",&n);
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
x--;y--;
to[top]=y;
next[top]=first[x];first[x]=top++;
to[top]=x;
next[top]=first[y];first[y]=top++;
}
solve(0);
printf("%d %d\n",ans+1,min);
}
return 0;
}
poj 1655的更多相关文章
- POJ 1655 Balancing Act&&POJ 3107 Godfather(树的重心)
树的重心的定义是: 一个点的所有子树中节点数最大的子树节点数最小. 这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点. POJ 1655 题目大意: 直接给你一棵树,让你求树的 ...
- POJ 1655 求树的重心
POJ 1655 [题目链接]POJ 1655 [题目类型]求树的重心 &题意: 定义平衡数为去掉一个点其最大子树的结点个数,求给定树的最小平衡数和对应要删的点.其实就是求树的重心,找到一个点 ...
- POJ.1655 Balancing Act POJ.3107 Godfather(树的重心)
关于树的重心:百度百科 有关博客:http://blog.csdn.net/acdreamers/article/details/16905653 1.Balancing Act To POJ.165 ...
- poj 1655 Balancing Act(找树的重心)
Balancing Act POJ - 1655 题意:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. /* 找树的重心可以用树形dp或 ...
- poj 1655 Balancing Act 求树的重心【树形dp】
poj 1655 Balancing Act 题意:求树的重心且编号数最小 一棵树的重心是指一个结点u,去掉它后剩下的子树结点数最少. (图片来源: PatrickZhou 感谢博主) 看上面的图就好 ...
- 关于树的重心--POJ 1655
树的重心的定义: 在一棵树中,找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 通俗来说就是以这个点为根节点,找到他最大的衣蛾子树,然后 ...
- POJ 1655 Balancing Act【树的重心】
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14251 Accepted: 6027 De ...
- POJ 1655.Balancing Act 树形dp 树的重心
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14550 Accepted: 6173 De ...
- POJ 1655 - Balancing Act - [DFS][树的重心]
链接:http://poj.org/problem?id=1655 Time Limit: 1000MS Memory Limit: 65536K Description Consider a tre ...
- POJ 1655 BalanceAct 3107 Godfather (树的重心)(树形DP)
参考网址:http://blog.csdn.net/acdreamers/article/details/16905653 树的重心的定义: 树的重心也叫树的质心.找到一个点,其所有的子树中最大的 ...
随机推荐
- EEG preprocess - re-reference EEG预处理 - 重参考
Source: https://blricrex.hypotheses.org/ressources/eeg/pre-processing-for-erps/re-referencing-eeg-da ...
- win7中VS2010中安装CSS3.0问题解决方法
win7中VS2010中安装CSS3.0问题解决方法 在安装Standards Update for VS2010 SP1后,VS2010中没有CSS3.0问题,以下是我的解决方法 1.首先去官网 ...
- WPF中监视DependencyProperty的变化
WPF中监视DependencyProperty的变化 周银辉 尽管一个类会提供很多事件,但有时候还是显得不够,比如说前两天我就以为WPF的ListBox控件会有ItemsSourceChange ...
- CSS常用浮出层的写法
点此查看实例展示 是的,我们即将实现的就是以上功能,是不是很生动? 贴上HTML: <div class="poptip"> <span class=" ...
- VS2012使用Git并连接到osc@git
1.下载GitExtensions并安装 在http://sourceforge.net/projects/gitextensions/files/latest/download 下载 安装时请注意 ...
- LeetCode-70-Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- 解决win8 下 eclipse 中文字体太小的问题
一.把字体设置为Courier New 操作步骤:打开Elcipse,点击菜单栏上的“Windows”——点击“Preferences”——点击“Genneral”——点击“Appearance”— ...
- HTML5 屏蔽触屏滚动
开发移动的html应用时常常需要将网页触控事件屏蔽掉.代码如下: //屏蔽全局触控事件 document.ontouchmove = function(e){ e.preventDefault();} ...
- datatable刷新表头
使用jQuery的datatable生成表格数据,当需要改变表头时,调用Table.fnDestroy();再重新创建表头 var oTable = null; function initSettin ...
- Opencv 完美配置攻略(Win8.1 + Opencv 2.4.8 + VS 2013)