poj3585 Accumulation Degree(换根dp)
传送门
换根dp板子题(板子型选手
题意:
一棵树确定源点和汇点找到最大的流量(拿出一整套最大瘤板子orz
- const int maxn=2e5+;
- int head[maxn],tot;
- struct node
- {
- int nt,to;long long w;
- }q[*maxn];
- long long dp[maxn];int cnt[maxn];
- void insert(int u,int v,long long w)
- {
- q[tot].nt=head[u];q[tot].w=w;q[tot].to=v;head[u]=tot++;
- q[tot].nt=head[v];q[tot].w=w;q[tot].to=u;head[v]=tot++;
- }
- long long ans;
- void dfs(int u,int fa)
- {
- //cout<<u<<endl;
- for(int i=head[u];i!=-;i=q[i].nt){
- int v=q[i].to;long long w=q[i].w;
- if(v==fa) continue;
- dfs(v,u);
- if(cnt[v]==)
- dp[u]+=w;
- else
- dp[u]+=min(w,dp[v]);
- //cout<<u<<" "<<dp[u]<<endl;
- }
- }
- void dfs1(int u,int fa)
- {
- //cout<<u<<" "<<dp[u]<<endl;
- ans=max(ans,dp[u]);
- for(int i=head[u];i!=-;i=q[i].nt){
- int v=q[i].to;long long w=q[i].w;
- if(v==fa) continue;
- dp[v]+=min(w,dp[u]-min(dp[v],w));
- dfs1(v,u);
- }
- }
- int main()
- {
- int t;scanf("%d",&t);
- while(t--){
- int n;scanf("%d",&n);ans=;
- for(int i=;i<=n;i++) head[i]=-,cnt[i]=,dp[i]=;tot=;
- for(int i=;i<n;i++){
- int t1,t2;long long t3;scanf("%d%d%lld",&t1,&t2,&t3);
- insert(t1,t2,t3);cnt[t1]++;cnt[t2]++;
- }
- dfs(,);
- dfs1(,);
- cout<<ans<<endl;
- }
- }
poj3585 Accumulation Degree(换根dp)的更多相关文章
- POJ3585:Accumulation Degree(换根树形dp)
Accumulation Degree Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3425 Accepted: 85 ...
- 题解 poj3585 Accumulation Degree (树形dp)(二次扫描和换根法)
写一篇题解,以纪念调了一个小时的经历(就是因为边的数组没有乘2 phhhh QAQ) 题目 题目大意:找一个点使得从这个点出发作为源点,流出的流量最大,输出这个最大的流量. 以这道题来介绍二次扫描和换 ...
- poj3585 Accumulation Degree【树形DP】【最大流】
Accumulation Degree Time Limit: 5000MS Memory Limit: 65536K Total Submissions:3151 Accepted: 783 ...
- POJ3585 Accumulation Degree 【树形dp】
题目链接 POJ3585 题解 -二次扫描与换根法- 对于这样一个无根树的树形dp 我们先任选一根进行一次树形dp 然后再扫一遍通过计算得出每个点为根时的答案 #include<iostream ...
- POJ 3585 Accumulation Degree【换根DP】
传送门:http://poj.org/problem?id=3585 题意:给定一张无根图,给定每条边的容量,随便取一点使得从这个点出发作为源点,发出的流量最大,并且输出这个最大的流量. 思路:最近开 ...
- [算法学习] 换根dp
换根dp 一般来说,我们做题的树都是默认 \(1\) 为根的.但是有些题目需要计算以每个节点为根时的内容. 朴素的暴力:以每个点 \(u\) 作为 \(root\) 暴力dfs下去,复杂度\(O(n^ ...
- [BZOJ4379][POI2015]Modernizacja autostrady[树的直径+换根dp]
题意 给定一棵 \(n\) 个节点的树,可以断掉一条边再连接任意两个点,询问新构成的树的直径的最小和最大值. \(n\leq 5\times 10^5\) . 分析 记断掉一条边之后两棵树的直径为 \ ...
- 2018.10.15 NOIP训练 水流成河(换根dp)
传送门 换根dp入门题. 貌似李煜东的书上讲过? 不记得了. 先推出以1为根时的答案. 然后考虑向儿子转移. 我们记f[p]f[p]f[p]表示原树中以ppp为根的子树的答案. g[p]g[p]g[p ...
- 换根DP+树的直径【洛谷P3761】 [TJOI2017]城市
P3761 [TJOI2017]城市 题目描述 从加里敦大学城市规划专业毕业的小明来到了一个地区城市规划局工作.这个地区一共有ri座城市,<-1条高速公路,保证了任意两运城市之间都可以通过高速公 ...
随机推荐
- 解决Tomcat控制台输出乱码问题
解决Tomcat控制台输出乱码问题 打开Edit Configuration,在VM options一栏输入 -Dfile.encoding=UTF-8 然后到IDEA的bin目录找到 idea64. ...
- C/C++、C#、JAVA(一):代码模板与库代码的引入
代码默认模板 编译性高级编程语言中,几乎每种语言,都有个静态的 main 方法作为程序启动入口,每种语言都有其编写规范.为了学习 C/C++.C#.JAVA四种语言,我们要先从默认代码模板中,慢慢摸索 ...
- POJ3352 Road Construction Tarjan+边双连通
题目链接:http://poj.org/problem?id=3352 题目要求求出无向图中最少需要多少边能够使得该图边双连通. 在图G中,如果任意两个点之间有两条边不重复的路径,称为“边双连通”,去 ...
- GZOI 2017配对统计 树状数组
题目 https://www.luogu.com.cn/problem/P5677 分析 最开始读题的时候没有读的太懂,以为i是在选定区间内给的,实际上不是,这道题的意思应该是在l和r的区间内找出有多 ...
- Nginx Rewrite规则的break和last示例
break和last各自的作用 官方解释 last:stops processing the current set of ngx_http_rewrite_module directives fol ...
- 干货 | 近期热点机器学习git项目
No1:PyTorchImplementation of DeepMind's BigGAN(https://github.com/huggingface/pytorch-pretrained-Big ...
- TensorFlow官方发布剪枝优化工具:参数减少80%,精度几乎不变
去年TensorFlow官方推出了模型优化工具,最多能将模型尺寸减小4倍,运行速度提高3倍. 最近现又有一款新工具加入模型优化"豪华套餐",这就是基于Keras的剪枝优化工具. 训 ...
- PMP学习笔记(一)
前9节列举出了很多例子来辅助理解什么是项目管理,在学习的过程当中听到了一些名词,查询过一些资料之后,在这里梳理出来 1.关键路径法 关键路径是指设计中从输入到输出经过的延时最长的逻辑路径.优化关键路径 ...
- Chrome 经典插件
记录几个很喜欢的 Chrome 插件,怕之后找不到了. 1. Dark Theme 很喜欢的一个黑色主题! 2. Volume Booster 能把音量提高2倍的小插件!好用! 3. Looper f ...
- ajax的封装——jq简化版
最近在复习ajax的知识,练习了下ajax的封装,此处做下笔记 废话不多说,直接代码 //发请求 //此处的url为请求地址,type为请求方式,success为请求成功的回调函数 myaxios({ ...