这道题我有很多要说

首先是基础的解题思路:

树形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的更多相关文章

  1. POJ 1655 Balancing Act&&POJ 3107 Godfather(树的重心)

    树的重心的定义是: 一个点的所有子树中节点数最大的子树节点数最小. 这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点. POJ 1655 题目大意: 直接给你一棵树,让你求树的 ...

  2. POJ 1655 求树的重心

    POJ 1655 [题目链接]POJ 1655 [题目类型]求树的重心 &题意: 定义平衡数为去掉一个点其最大子树的结点个数,求给定树的最小平衡数和对应要删的点.其实就是求树的重心,找到一个点 ...

  3. POJ.1655 Balancing Act POJ.3107 Godfather(树的重心)

    关于树的重心:百度百科 有关博客:http://blog.csdn.net/acdreamers/article/details/16905653 1.Balancing Act To POJ.165 ...

  4. poj 1655 Balancing Act(找树的重心)

    Balancing Act POJ - 1655 题意:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. /* 找树的重心可以用树形dp或 ...

  5. poj 1655 Balancing Act 求树的重心【树形dp】

    poj 1655 Balancing Act 题意:求树的重心且编号数最小 一棵树的重心是指一个结点u,去掉它后剩下的子树结点数最少. (图片来源: PatrickZhou 感谢博主) 看上面的图就好 ...

  6. 关于树的重心--POJ 1655

    树的重心的定义: 在一棵树中,找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 通俗来说就是以这个点为根节点,找到他最大的衣蛾子树,然后 ...

  7. POJ 1655 Balancing Act【树的重心】

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14251   Accepted: 6027 De ...

  8. POJ 1655.Balancing Act 树形dp 树的重心

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14550   Accepted: 6173 De ...

  9. POJ 1655 - Balancing Act - [DFS][树的重心]

    链接:http://poj.org/problem?id=1655 Time Limit: 1000MS Memory Limit: 65536K Description Consider a tre ...

  10. POJ 1655 BalanceAct 3107 Godfather (树的重心)(树形DP)

    参考网址:http://blog.csdn.net/acdreamers/article/details/16905653   树的重心的定义: 树的重心也叫树的质心.找到一个点,其所有的子树中最大的 ...

随机推荐

  1. EEG preprocess - re-reference EEG预处理 - 重参考

    Source: https://blricrex.hypotheses.org/ressources/eeg/pre-processing-for-erps/re-referencing-eeg-da ...

  2. win7中VS2010中安装CSS3.0问题解决方法

    win7中VS2010中安装CSS3.0问题解决方法   在安装Standards Update for VS2010 SP1后,VS2010中没有CSS3.0问题,以下是我的解决方法 1.首先去官网 ...

  3. WPF中监视DependencyProperty的变化

    WPF中监视DependencyProperty的变化   周银辉 尽管一个类会提供很多事件,但有时候还是显得不够,比如说前两天我就以为WPF的ListBox控件会有ItemsSourceChange ...

  4. CSS常用浮出层的写法

    点此查看实例展示 是的,我们即将实现的就是以上功能,是不是很生动? 贴上HTML: <div class="poptip"> <span class=" ...

  5. VS2012使用Git并连接到osc@git

    1.下载GitExtensions并安装 在http://sourceforge.net/projects/gitextensions/files/latest/download 下载 安装时请注意 ...

  6. 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 ...

  7. 解决win8 下 eclipse 中文字体太小的问题

    一.把字体设置为Courier New  操作步骤:打开Elcipse,点击菜单栏上的“Windows”——点击“Preferences”——点击“Genneral”——点击“Appearance”— ...

  8. HTML5 屏蔽触屏滚动

    开发移动的html应用时常常需要将网页触控事件屏蔽掉.代码如下: //屏蔽全局触控事件 document.ontouchmove = function(e){ e.preventDefault();} ...

  9. datatable刷新表头

    使用jQuery的datatable生成表格数据,当需要改变表头时,调用Table.fnDestroy();再重新创建表头 var oTable = null; function initSettin ...

  10. Opencv 完美配置攻略(Win8.1 + Opencv 2.4.8 + VS 2013)