我們首先發現,每一條邊都至少走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. Linux gprof命令

    一.简介 gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的执行信息,可以得到每个函数的调用次数,执行时间,调用关系等信息,简单易懂. ...

  2. 将Win7笔记本设置成WiFi热点(无线路由器)

    查看是否能启动WiFi网卡: S1:运行cmd命令,打开命令提示符窗口(以管理员身份运行). S2:在命令行输入:netsh wlan show drivers. 若“支持的承载网络”后为“是”,则可 ...

  3. workerman使用

    1.start_timer.php(boc) <?php use \Workerman\Worker; use \Workerman\Lib\Timer; require_once '/var/ ...

  4. 2018.06.29 NOIP模拟 排列(线段树)

    排列(premu.cpp) [题目描述] 对于一个 1 到 n 的排列,逆序数的定义为:排列中第 i 位 ai的逆序数就是 a1-ai-1中比 ai大的数的个数.另外用 pi表示 a1,-,ai的逆序 ...

  5. systemctl自定义service

    应用场景:开启自启动运行脚本/usr/local/manage.sh 一.服务介绍 CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户 ...

  6. Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.liuyang.JDbCTemplate.PersonDao]: No default constructor fo

    错误是说我的配置文件中没有对构造函数进行配置,所以找不到构造函数,在配置文件application.xml中加入如下句子: <bean id="personDao" clas ...

  7. 基础的linux学习

    学习了这几个命令分享一下: 文本文件内搜索数据 grep -n -e pattern1 -e pattern2 file1 -n 搜索到的数据显示行号展示 -e pattern1 多个匹配模式下可以通 ...

  8. UVa 11280 Flying to Fredericton (DP + Dijkstra)

    题意:给出n(2<=n<=100)个城市之间的m(0<=m<=1000)条航线以及对应的机票价格,要求回答一些询问,每个询问是给出最大停留次数S,求从其实城市Calgary到终 ...

  9. Sensor Fusion-based Exploration in Home Environments using Information, Driving and Localization Gains(基于传感器融合的使用信息、驾驶和定位增益在家庭环境中的探索)

    Authors: Joong-Tae Park, Jae-Bok Song Department:Department  of  Mechanical  Engineering,  Korea  Un ...

  10. hdu 5020 求3点共线的组合数

    http://acm.hdu.edu.cn/showproblem.php?pid=5020 求3点共线的组合数 极角排序然后组合数相加 #include <cstdio> #includ ...