博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1655 Balancing Act(树形DP,删点)
阅读量:4035 次
发布时间:2019-05-24

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

1、

2、题目大意:

一棵树有n个点,每个点都有一个平衡值,就是该点的子树中结点数最大值,现在要删除这样一个点,他的平衡值最小,本题只有一种方式,不用考虑是否有重复值,只需要输出最小的那个点及他的平衡值即可

dp[i]表示i点的平衡值

dp[i]=max(max(cnt[v]),n-cnt[u])

3、AC代码:

#include
#include
#include
using namespace std;#define N 20005#define INF 20005int v[N*2],next[N*2],head[N*2];int tot;int cnt[N];int ans,res,n;int dp[N];void add_edge(int a,int b){ v[tot]=b; next[tot]=head[a]; head[a]=tot++;}void dfs(int u,int fa){ cnt[u]=1; for(int i=head[u];i!=-1;i=next[i]) { int vv=v[i]; if(vv!=fa) { dfs(vv,u); cnt[u]+=cnt[vv]; ans=max(ans,cnt[vv]); } } dp[u]=max(ans,n-cnt[u]); res=min(dp[u],res);}int main(){ int t,a,b; scanf("%d",&t); while(t--) { scanf("%d",&n); tot=0; memset(head,-1,sizeof(head)); memset(cnt,0,sizeof(cnt)); memset(dp,0,sizeof(dp)); for(int i=1;i

 

转载地址:http://hrddi.baihongyu.com/

你可能感兴趣的文章
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.147 - LeetCode1108
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql create database新建utf8mb4 数据库
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql drop table (删除表)
查看>>
mysql:sql truncate (清除表数据)
查看>>
scrapy:xpath string(.)非常注意问题
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>