二次扫描与换根法

用于解决无根树,对于每一个节点作为根时都要统计

做法:

1.先以任意一个节点为根,做树形DP,保存每个节点的DP值

2.然后自上而下dfs,对于每个节点考虑以他为根的最大值

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 200505;
int init() {
int rv = 0, fh = 1;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') fh = -1;
c = getchar();
}
while(c >= '0' && c <= '9'){
rv = (rv<<1) + (rv<<3) + c -'0';
c = getchar();
}
return fh * rv;
}
int T, n, f[MAXN], c[MAXN], degree[MAXN], head[MAXN], nume, rot;
bool fff[MAXN];
struct edge{
int to, nxt, flow;
}e[MAXN << 1];
void adde(int from, int to, int flow) {
e[++nume].to = to;
e[nume].flow = flow;
e[nume].nxt = head[from];
head[from] = nume;
}
void dfs1(int u) {
fff[u] = 1;
for(int i = head[u]; i ; i = e[i].nxt) {
int v = e[i].to;
if(fff[v]) continue;
if(degree[v] == 1) {f[u] += e[i].flow;}
else {dfs1(v); f[u] += min(f[v], e[i].flow);}
}
}
void dfs2(int u) {
fff[u] = 1;
for(int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
if(fff[v]) continue;
c[v] = f[v];
if(degree[u] == 1) c[v] += e[i].flow;
else {
c[v] += min(c[u] - min(f[u], e[i].flow), e[i].flow);
}
dfs2(v);
}
}
int main() {
T = init();
while(T--) {
n = init();
memset(fff, 0, sizeof(fff));
memset(f, 0, sizeof(f));
memset(c, 0, sizeof(c));
memset(degree, 0, sizeof(degree));
memset(head, 0, sizeof(head));
memset(e, 0, sizeof(e));
nume = 0;
for(int i = 1; i < n; i++) {
int u = init(), v = init(), flow = init();
adde(u, v, flow); adde(v, u, flow);
degree[u]++; degree[v]++;
}
rot = 1;
dfs1(rot);
c[rot] = f[rot];
memset(fff, 0, sizeof(fff));
dfs2(rot);
int ans = 0;
for(int i = 1;i <= n; i++) ans = max(ans, c[i]);
cout << ans << endl;
} return 0;
}

POJ 3585 Accumulation Degree的更多相关文章

  1. poj 3585 Accumulation Degree(二次扫描和换根法)

    Accumulation Degree 大致题意:有一棵流量树,它的每一条边都有一个正流量,树上所有度数为一的节点都是出口,相应的树上每一个节点都有一个权值,它表示从这个节点向其他出口可以输送的最大总 ...

  2. POJ 3585 Accumulation Degree【换根DP】

    传送门:http://poj.org/problem?id=3585 题意:给定一张无根图,给定每条边的容量,随便取一点使得从这个点出发作为源点,发出的流量最大,并且输出这个最大的流量. 思路:最近开 ...

  3. POJ 3585 Accumulation Degree 题解

    题面 一句话题意:找一个点使得,使得从这个点出发作为源点,发出的流量最大,输出这个最大的流量 这道题是换根法+二次扫描的模板: 首先若确定1为原点,那么可以写出dp方程:当v的度是1时, g[u]+= ...

  4. POJ3585:Accumulation Degree(换根树形dp)

    Accumulation Degree Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3425   Accepted: 85 ...

  5. poj3585 Accumulation Degree【树形DP】【最大流】

    Accumulation Degree Time Limit: 5000MS   Memory Limit: 65536K Total Submissions:3151   Accepted: 783 ...

  6. POJ3585 Accumulation Degree(二次扫描与换根法)

    题目:http://poj.org/problem?id=3585 很容易想出暴力.那么就先扫一遍. 然后得到了指定一个根后每个点的子树值. 怎么转化利用一下呢?要是能找出当前点的父亲的 “ 不含当前 ...

  7. poj3585 Accumulation Degree[树形DP换根]

    思路其实非常简单,借用一下最大流求法即可...默认以1为根时,$f[x]$表示以$x$为根的子树最大流.转移的话分两种情况,一种由叶子转移,一种由正常孩子转移,判断一下即可.换根的时候由頂向下递推转移 ...

  8. Accumulation Degree

    #include<cstdio> #include<cstring> #define INF 0x7fffffff using namespace std; ; inline ...

  9. POJ - 3585 树上最大流 换根法

    题意:给出一棵树,边上有容量限制,求以任一点作为根和源点,叶子作为汇点的最大流的最大值 首先上网络流等于找死 树形DP可以\(O(n)\)求出以某点\(u\)为根的最大流,只需设\(f[u]=\sum ...

随机推荐

  1. (转)MyBatis框架的学习(三)——Dao层开发方法

    http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...

  2. UVA 11374 Airport Express (最短路)

    题目只有一条路径会发生改变. 常见的思路,预处理出S和T的两个单源最短路,然后枚举商业线,商业线两端一定是选择到s和t的最短路. 路径输出可以在求最短路的同时保存pa数组得到一棵最短路树,也可以用di ...

  3. SQL与脚本语言

    SQL是人类与数据库沟通的语言https://zhidao.baidu.com/question/413397944.html我个人认为SQL是一种专门对数据库进行操作的特殊的脚本语言.因为SQL语句 ...

  4. Node.js连接mysql报加密方式错误解决方案

    本人在学习全栈开发过程中做一个Node的web项目在连接本地MySQL8.0版本的数据库时,发现Navicat连接不上,它报了一个数据库的加密方式导致连接不上的错误,错误如下: MySQL8.0版本的 ...

  5. nodeJS进程管理器pm2

    pm2是一个带有负载均衡功能的Node应用的进程管理器.当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的. PM2是开源的基于Nodejs的进程管 ...

  6. javaEE(2)_http协议

    一.HTTP协议简介 1.客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式.dos环境下可直接通过telnet ...

  7. 表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的

    jQuery代码 <input value="请输入用户名" type="text"> <input value="请输入密码&qu ...

  8. Linux rm删除文件未释放空间问题分析

    问题描述: 在自己的虚拟机上做实验时出现空间不足情况,检查发现之前的kafka集群测试日志在几天写了 25G,于是进入 /data/kafka01/logs 目录执行 “rm -rf *” 删除所有测 ...

  9. 对shell中cat 和EOF的理解

    下载我们在linux文本界面下测试下 $cat hao.c $wo mei you chi fan $cat > hao.c << EOF >where are you > ...

  10. 杭电 1503 Advanced Fruits

    Description The company "21st Century Fruits" has specialized in creating new sorts of fru ...