博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF219D Choosing Capital for Treeland
阅读量:5262 次
发布时间:2019-06-14

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

CF219D Choosing Capital for Treeland

这道题一开始觉得比较毒瘤,但是想一下还是想的出来的。

我们考虑定义\(dp[i][0]\)代表到点\(i\)所有子节点的最小权值,\(dp[i][1]\)代表到点\(i\)子树外所有节点的最小权值。

那么显然有:\(dp[i][0]=\sum _{t\in son_i} dp[t][0]+[t->i]\)

\(fa_i=p\),又可以推出:\(dp[i][1]=dp[p][1]+[i->p]+\sum _{t\in son_p,t\neq i}(dp[t][0]+[t->p])\)

那么最后,对于节点\(x\),选择\(x\)为首都的代价就是:\(dp[x][0]+dp[x][1]\)

#include
#include
#include
#include
#include
#include
#include
#define ll long long#define maxn (int)(2e5+1000)using namespace std;struct node { int u,v;};struct cop { bool operator()(const node a,const node b) const{ return (a.u==b.u)?(a.v
side[maxn];map
check;ll sum[maxn];bool test(int u,int v) { struct node a={u,v}; return check[a];}void dfs1(int now,int fa) { for(int i=0;i
>n; for(int i=1;i
>u>>v;side[u].push_back(v);side[v].push_back(u); struct node a={u,v};check[a]=1; }; dfs1(1,0); dfs2(1,0); sort(ans+1,ans+1+cnt); cout<
<

1669439-20190821213741733-197902061.jpg

转载于:https://www.cnblogs.com/GavinZheng/p/11391388.html

你可能感兴趣的文章
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>