我們首先發現,每一條邊都至少走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. Region特征算子与形态学运算——第3讲

      问题提出:求下图中楔形缺口到圆心的最短距离. [涉及知识点讲解] 一.Region特征算子 在图形窗口中用鼠标单击选中某个Region,然后点击菜单栏的“打开特征检测”图标,就可以看到当前Regi ...

  2. Monte carlo

    转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...

  3. static 成员函数

    和静态数据成员一样,静态成员函数是所有对象共享的,不是单独属于某一个对象,由于静态成员函数没有传递this指针,故static member function 只能访问static成员,不能访问非st ...

  4. Ehcache配置参数简介

    < defaultCache         maxElementsInMemory = "10000"         maxElementsOnDisk = " ...

  5. Linux服务器部署系列之三—DNS篇

    网上介绍DNS的知识很多,在这里我就不再讲述DNS原理及做名词解释了.本篇我们将以一个实例为例来讲述DNS的配置,实验环境如下: 域名:guoxuemin.cn, 子域:shenzhen.guoxue ...

  6. 简单的Java,Python,C,C++

    Java 语言 //package main //注意不要添加包名称,否则会报错. import java.io.*; import java.util.*; cin.hasNext(); cin.h ...

  7. 20155305乔磊2016-2017-2《Java程序设计》第七周学习总结

    教材学习内容总结 第十二章 Lambda 12.1 认识Lambda语法 - Lambda 教材的引入循序渐近.深入浅出 如果使用JDK8的话,可以使用Lambda特性去除重复的信息,例: Compa ...

  8. svn错误:Can't convert string from 'UTF-8' to native encoding

    如果文件名包含了中文,当执行"svn up ."遇到如下错误时: svn: Can't convert string from 'UTF-8' to native encoding ...

  9. 【翻译】JavaScript循环和作用域

    我的翻译小站:https://www.zcfy.cc/article/javascript-loops-and-scope 翻译原文链接:https://flaviocopes.com/javascr ...

  10. java 泛型的类型擦除和桥方法

    oracle原文地址:https://docs.oracle.com/javase/tutorial/java/generics/erasure.html 在Java中,泛型的引入是为了在编译时提供强 ...