我們首先發現,每一條邊都至少走1次,因為我們必須走到每一個節點按按鈕

如果我們不走一個節點,說明這個節點已經有傳送門了,但是必須走到這個節點開傳送門,矛盾

然後我們發現,每一條邊至多經過2次

如果我們將傳送門設置在一個祖先,則邊fa->i會經過兒子個數次

但是如果將傳送門設置在兒子u處,則邊fa->i只會經過2次,更優

我們再次發現,傳送的位置和第一個傳送門有關係,而和第二個無關

所以我們可以先設置兒子的傳送門,再設置父親的傳送門

顯然,設置傳送門可以讓一些邊只走1次,我們可以計算最優方案

記dp[i][0/1]表示在/不在i點設置傳送門的單邊權值之和

若設置傳送門於祖先,則為了保證祖先的邊只走2次或者以下,則只能放一個孩子到祖先,其他都老老實實的走2遍

所以dp[i][1]=max(dp[i][1],dp[v[i]][1]+w[i])

若設置傳送門于當前點或者孩子,那麼我們可以走孩子邊

由於我們設置傳送門在孩子不會影響到父親,所以我們可以綜合選和不選的方案

所以dp[i][0]= sigma max(dp[v[i]][0],dp[v[i]][1]+w[i])

表示現在我們在v[i]設置傳送門的方案,與不在v[i]設置傳送門的方案

#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

ll n,v[2000010],w[2000010],nxt[2000010],ec,h[1000010],dp[1000010][2];

void add(ll x,ll y,ll z){v[++ec]=y;w[ec]=z;nxt[ec]=h[x];h[x]=ec;}

void dfs(ll x,ll p){

for(ll i=h[x];i;i=nxt[i])

if(p!=v[i]){

dfs(v[i],x);

dp[x][1]=max(dp[x][1],dp[v[i]][1]+w[i]);

dp[x][0]+=max(dp[v[i]][0],dp[v[i]][1]+w[i]);

}

}

int main(){

freopen(“portal.in”,“r”,stdin);

freopen(“portal.out”,“w”,stdout);

ll ans=0;

scanf("%lld",&n);

for(ll i=1;i<n;i++){

ll a,b,c;

scanf("%lld%lld%lld",&a,&b,&c);

ans+=c*2;

add(a,b,c);add(b,a,c);

}

dfs(1,0);

printf("%lld",ans-dp[1][0]);

}

jzoj5906的更多相关文章

  1. <JZOJ5906>传送门

    emmm dpdpdp然鹅我考场上并想不到 还是凉凉 #include<cstdio> #include<cmath> #include<iostream> #in ...

  2. NOIP前的刷题记录

    因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...

随机推荐

  1. mysql对emoji的支持

    步骤: 升级mysql数据库到5.5.3+ 修改database.table和column字符集 alter database DATABASE_NAME character set = utf8mb ...

  2. rsync 目录以 / 结尾 轻松同步数据

    命令:#rsync –avz foo/ bar/ 意义:将 foo 目录之下的所有内容,同步到 bar 目录之下.如果不以斜杠结尾,意义就不同了.

  3. 获取GUID的GET网址:createguid.com

    1.在浏览器的地址栏中输入createguid.com,回车之后即可得到一个GUID 2.在JMeter中可以这样填写HTTP Request 然后通过正则表达式提取器提取GUID <texta ...

  4. Linux IPC之共享内存

    System V共享内存机制: shmget  shmat  shmdt  shmctl 原理及实现: system V IPC机制下的共享内存本质是一段特殊的内存区域,进程间需要共享的数据被放在该共 ...

  5. linux安装mysql~~~mysql5.6.12

    Linux安装mysql服务器 准备: MySQL-client-5.6.12-1.rhel5.i386.rpm MySQL-server-5.6.12-1.rhel5.i386.rpm 首先检查环境 ...

  6. Linux下Git安装及配置

    转载自:https://blog.csdn.net/u013256816/article/details/54743470:加了一些自己的注释. yum安装 这里采用的是CentOS系统,如果采用yu ...

  7. Python+Android开发

    1 下载Scripting Layer for Android (SL4A) Scripting Layer for Android (SL4A) 是一个开源项目,目标是为android系统提供脚本语 ...

  8. Breaseman算法绘制圆形|中点算法绘制圆形_程序片段

    Breaseman算法绘制圆形|中点算法绘制圆形_程序片段 1. Breaseman算法绘制圆形程序 由于算法的特殊性,限制绘制第一象限部分,其他部分通过旋转绘制. void CCGProjectWo ...

  9. 【spfa训练】HDU4725 (层级建图)

    HDU4725 题目大意:一些节点分布在不同的层上,已知相邻的层可以往来距离为c,在给你一些已知的边,问你点1-n的最短路 分析:越往后做,越觉得最短路的考点已经不是spfa算法还是dijkscar算 ...

  10. 讲解java异常

    J2EE项目异常处理                        为什么要在J2EE项目中谈异常处理呢?可能许多java初学者都想说:“异常处理不就是try….catch…finally吗?这谁都会 ...