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 树的重心的定义: 树的重心也叫树的质心.找到一个点,其所有的子树中最大的 ...
随机推荐
- 第13章 Java常用类
1.自动装箱和自动拆箱 自动装箱:基本类型就自动的封装到与它相同类型的包装中:如: 创建一个对象时:Integer i = 100;本质上是编译器编译时为我们添加了:Integer i = new I ...
- Java面向对象 第一章 面向对象开发方法概述
一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...
- 转: Protobuf 的 proto3 与 proto2 的区别
Protobuf 的 proto3 与 proto2 的区别 On 2015-07-17 19:16:00 By Soli Protobuf 的 proto3 与 proto2 的区别 这是一 ...
- jquery的各种隐藏显现动画的区别
<!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8&quo ...
- TaskScheduler一个.NET版任务调度器
TaskScheduler是一个.net版的任务调度器.概念少,简单易用. 支持SimpleTrigger触发器,指定固定时间间隔和执行次数: 支持CronTrigger触发器,用强大的Cron表达式 ...
- FPGA与simulink联合实时环路系列—开篇
FPGA与simulink联合实时环路系列—开篇 作为网络上第一个开源此技术,笔者迫不及待地想将此技术分享出来,希望大家多多支持.笔者从2011年接触FPGA以来,从各个方面使用FPGA,无论是控制. ...
- Linux 下配置php开发环境
windows下有一键安装的环境很方便,不过现实中常常服务器是linux系统.想要搭建环境怎么搞呢? 边学变发直播博客,不定期更新.
- thinkphp __PUBLIC__的定义 __ROOT__等常量的定义
2 3 4 5 6 7 8 9 '__TMPL__' => APP_TMPL_PATH, // 项目模板目录 '__ROOT__' => __ROOT__, ...
- 软件卸载工具 Uninstall Tool 3.5.1 中文破解版
Uninstall Tool 是一个小巧.安全.快速.强大的软件卸载删除工具,它支持在使用软件本身的卸载程序卸载完毕后,再扫描软件残留的注册及其它残余文件,将其彻底在系统删除!安装监视器可以监视每个应 ...
- 关于Wireshark "The NPF driver isn’t running……"解决办法
启动Wireshark软件时出现了如下图所示的错误,就搜索了一下解决方法,特总结如下: 这个错误是因为没有开启NPF服务造成的.简要说一下NPF吧. NPF即网 络数据包过滤器(Netgroup Pa ...