【BZOJ3677】[Apio2014]连珠线 换根DP

【BZOJ3677】[Apio2014]连珠线

Description

在列奥纳多·达·芬奇时期,有一个流行的童年游戏,叫做“连珠线”。不出所料,玩这个游戏只需要珠子和线,珠子从1到礼编号,线分为红色和蓝色。游戏开始时,只有1个珠子,而接下来新的珠子只能通过线由以下两种方式被加入: 
1.Append(w,杪):-个新的珠子w和一个已有的珠子杪连接,连接使用红线。 
2.Insert(w,u,v):-个新的珠子w加入到一对通过红线连接的珠子(u,杪)之间,并将红线改成蓝线。也就是将原来u连到1的红线变为u连到w的蓝线与W连到V的蓝线。 
无论红线还是蓝线,每条线都有一个长度。而在游戏的最后,将得到游戏的最后得分:所有蓝线的长度总和。 
现在有一个这个游戏的最终结构:你将获取到所有珠子之间的连接情况和所有连线的长度,但是你并不知道每条线的颜色是什么。 
你现在需要找到这个结构下的最大得分,也就是说:你需要给每条线一个颜色f红色或蓝色),使得这种连线的配色方案是可以通过上述提到的两种连线方式操作得到的,并且游戏得分最大。在本题中你只需要输出最大的得分即可。 

Input

第一行是一个正整数n,表示珠子的个数,珠子编号为1刭n。 
接下来n-l行,每行三个正整数ai,bi(l≤ai10000),表示有一条长度为ci的线连接了珠子ai和珠子bi。 

Output

输出一个整数,为游戏的最大得分。 

Sample Input

5
1 2 10
1 3 40
1 4 15
1 5 20

Sample Output

60

HINT

数据范围满足1≤n≤200000。 

题解:一开始想了个不换根的DP,结果错了。。。

先选择一个点当根,那么所有的蓝线一定是 父-子-孙 这样的。于是我们令g[x]表示当前点不是'子'的最大得分,f[x]表示当前点是'子'的最大得分,树形DP即可。

但是我们如何换根呢?我们需要维护f的最大值和次大值,然后就能搞了。

 

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=200010;
int n,cnt,ans;
int to[maxn<<1],next[maxn<<1],val[maxn<<1],head[maxn],f1[maxn],g[maxn],f2[maxn];
inline void add(int a,int b,int c)
{to[cnt]=b,val[cnt]=c,next[cnt]=head[a],head[a]=cnt++;
}
inline int rd()
{int ret=0,f=1;	char gc=getchar();while(gc<'0'||gc>'9')	{if(gc=='-')	f=-f;	gc=getchar();}while(gc>='0'&&gc<='9')	ret=ret*10+(gc^'0'),gc=getchar();return ret*f;
}
void dfs1(int x,int fa)
{f1[x]=f2[x]=-1<<30;for(int y,i=head[x];i!=-1;i=next[i])	if(to[i]!=fa){y=to[i],dfs1(y,x);int fy=g[y]+val[i]-max(g[y],g[y]+f1[y]+val[i]);if(fy>f1[x])	f2[x]=f1[x],f1[x]=fy;else	if(fy>f2[x])	f2[x]=fy;g[x]+=max(g[y],g[y]+f1[y]+val[i]);}
}
void dfs2(int x,int fa)
{ans=max(ans,g[x]);for(int y,i=head[x];i!=-1;i=next[i])	if(to[i]!=fa){y=to[i];int gx=g[x]-max(g[y],g[y]+f1[y]+val[i]),fx;if(f1[x]==g[y]+val[i]-max(g[y],g[y]+f1[y]+val[i]))	fx=f2[x];else	fx=f1[x];g[y]+=max(gx,gx+fx+val[i]);fx=gx+val[i]-max(gx,gx+fx+val[i]);if(fx>f1[y])	f2[y]=f1[y],f1[y]=fx;else	if(fx>f2[y])	f2[y]=fx;dfs2(y,x);}
}
int main()
{n=rd();int i,a,b,c;memset(head,-1,sizeof(head));for(i=1;i<n;i++)	a=rd(),b=rd(),c=rd(),add(a,b,c),add(b,a,c);dfs1(1,0),dfs2(1,0);printf("%d",ans);return 0;
}

 

转载于:https://www.cnblogs.com/CQzhangyu/p/7898704.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql数据备份在哪里_mysql之数据备份与恢复

本文内容&#xff1a; 复制文件法利用mysqldump利用select into outfile其它(列举但不介绍)首发日期&#xff1a;2018-04-19有些时候&#xff0c;在备份之前要先做flush tables &#xff0c;确保所有数据都被写入到磁盘中。复制文件法&#xff1a;对于myisam存储引擎的数据库&a…

洛谷 P1852 奇怪的字符串

P1852 奇怪的字符串 题目描述 输入两个01串&#xff0c;输出它们的最长公共子序列的长度 输入输出格式 输入格式&#xff1a;一行&#xff0c;两个01串 输出格式&#xff1a;最长公共子序列的长度 输入输出样例 输入样例#1&#xff1a; 复制 01010101010 00000011111 输出样例#…

steelray project viewer

steelray project viewer是一款英文语言软件&#xff0c;透过Steelray Project Viewer&#xff0c;可以打开、导航、浏览、打印Microsoft Project的.mpp文件。 转载于:https://www.cnblogs.com/hqyj/p/7909858.html

连接mysql报错有乱码_连接mysql服务器报错时,出现乱码

页头用了header(‘content-type:text/html;charsetutf-8’);try{$this->dbonew PDO($dsn,$dbuser,$dbpassword);}catch(Exception $e){echo $e->getMessage();}连接失败时会报错&#xff0c;但是乱码&#xff0c;IE下编码查看是UTF-8&#xff0c;但是是乱码&#xff0c;如…

文档基本结构标签的作用

页面文档的基本结构可以分为四层关系&#xff0c;其中涉及5个重要的结构性标签来构成一个页面&#xff1a;样本代码开始标签头标签和头标签的对象&#xff1a;有六个特殊标签可以放在头标签中使用标题标签主体标签 头标签和头标签的对象&#xff1a; 六个标签为<title>,&…

mysql jdbc字符编码_java中jdbc/sql出现编码问题

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column ?????“??? in field listat com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)at com.mysql.jdbc.MysqlIO.sendC…

BZOJ 1878 HH的项链 | 主席树

题意 询问区间有多少不同的数。 题解 和Luogu 1903一样&#xff0c;这道题也是用pre数组来求区间不同数的个数&#xff0c;这里pre[i]表示a[i]上一次出现的位置 &#xff11;&#xff0c;询问相当于查询区间内有多少pre小于等于左端点。 #include <cstdio> #include <…

python opencv 边缘检测_Python使用Opencv实现边缘检测以及轮廓检测的实现

边缘检测Canny边缘检测器是一种被广泛使用的算法&#xff0c;并被认为是边缘检测最优的算法&#xff0c;该方法使用了比高斯差分算法更复杂的技巧&#xff0c;如多向灰度梯度和滞后阈值化。Canny边缘检测器算法基本步骤&#xff1a;平滑图像&#xff1a;通过使用合适的模糊半径…

web程序入门五(http无状态)

Asp.net中的状态保持方案&#xff1a; ViewState&#xff1a;是donet特有的 微软提供的对象来完成状态保持 ViewState["key1"] 11; 赋值 键值对 形式 object类型 ViewState["key1"] 直接取值&#xff0c;将其转化成相应的类型 原理&#xff1a;本质…

排序算法之冒泡排序

注意第一个for循环i的范围是[1,sz - 1]; 第二个for循环的范围是[0,sz - i]; 因为是j 1<n,所以j < n - 1&#xff0c;所以i最小从1开始。 #include<iostream> #include<vector> using namespace std;void bubblesort(vector<int> &vec) {int sz ve…

vscode里面如何配置库_VS Code配置链接库文件

配置VS code在C语言中调用gsl库文件先确认gsl库&#xff0c;gcc都已正确安装&#xff0c;命令行g -L/usr/local/lib hello.c -o hello -lgsl -lgslcblas -lm没有错误则可以配置VS codetasks.json要配置args字段launch.json要配置environment字段c_cpp_properties.json要配置inc…

支付宝app支付java后台流程、原理分析(含nei wang chuan tou)

java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写 一、流程步骤 1.执行流程 当手机端app(就是你公司开发的app)在支付页面时&#xff0c;调起服务端(后台第1个创建订单接口)接口&#xff0c;后台把需要调起支付宝支付的参数返回给手机端…

python实现决策树数据直接赋值导入_决策树在python中的数据实现

我为python决策树算法实现完成了以下代码&#xff1a;from csv import readerdef load_csv(filename):file open(filename, "rb")lines reader(file)dataset list(lines)return dataset# Split a dataset based on an attribute and an attribute valuedef test_s…

互评Beta版本(Hello World!——SkyHunter)

1 基于NABCD评论作品&#xff0c;及改进建议 SkyHunter这款游戏我很喜欢&#xff0c;小时候总玩飞机类的游戏&#xff0c;这款游戏我上课的时候试玩了&#xff0c;在我电脑上运行是很好玩的&#xff0c;音乐震撼&#xff0c;画面玄幻&#xff0c;富有金属音乐的味道&#xff0c…

time是python的标准库吗_python3关于date和time的标准库

python3中关于日期和时间的标准库datetime和time&#xff0c;之前都是用的时候随用随查&#xff0c;今天系统的看一下用这两个库可以做些什么。1、time标准库#首先添加一个time对象&#xff0c;看一下该对象的属性和方法>>> import time,datetime>>> a time…

unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度

var arr [1, 2];arr.unshift(0); //result of call is 3, the new array length //arr is [0, 1, 2]arr.unshift(-2, -1); // 5 //arr is [-2, -1, 0, 1, 2]arr.unshift( [-3] ); //arr is [[-3], -2, -1, 0, 1, 2]语法 arr.unshift(element1, ..., elementN)参数列表 elemen…

acctype mysql assoc_DedeCMS V5.3二次开发经验分享

DedeCMS V5.3二次开发经验分享写在前面,DedeCMS系统的模板是非固定的&#xff0c;用户可以在新建栏目时可以自行选择栏目模板&#xff0c;官方仅提供最基本的默认模板&#xff0c;即是内置系统模型的各个模板&#xff0c;由于DedeCMS支持自定义频道模型&#xff0c;用户自定义新…

markdown基础语法整理

标题级别(一共六级) &#xff08;建议在#后加一个空格比较标准&#xff09; 通过在文字下方添加“”和“-”&#xff0c;他们分别表示一级标题和二级标题。在文字开头加上 “#”&#xff0c;通过“#”数量表示几级标题。&#xff08;共1~6级标题&#xff0c;级别越小字体越大&a…

mysql connector配置_mysql connector odbc配置注意事项

官方下载&#xff1a;http://dev.mysql.com/downloads/connector/odbc/有64位和32位版本&#xff0c;要根据自己的office版本是32还是64的安装1、版本匹配问题&#xff1a;[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中&#xff0c;驱动程序和应用程序之间的体系结构不匹配…

安卓源码下载

SetupSecurityPortingTuningCompatibilityReference转到源代码SetupGetting StartedDownloading and Building RequirementsEstablishing a Build EnvironmentDownloading the SourcePreparing to BuildCompiling with JackUsing Reference BoardsRunning BuildsBuilding Kerne…