洛谷比赛 U5442 买(最长链)
U5442 买
题目提供者bqsgwys
标签 树形结构 树的遍历 洛谷原创
题目背景
小E是个可爱的电路编码员。
题目描述
一天小E又要准备做电路了,他准备了一个电路板,上面有很多个电路元器件要安装,于是他跑到了村口某电子城去买。小E详细查看了某电子城的地图,发现自己要去地下一层,共有N个摊铺,任意两个摊铺之间由道路直接或间接相连,一共N-1条道路,道路是双向的。小E一开始处于1号摊铺的位置,由于电子城里很挤,他想走的尽量少。
输入输出格式
输入格式:
第一行一个整数N,代表摊铺的数目。
接下来N-1行,每行三个整数s, t, w,表示有一条从s号铺到t号铺的双向道路,长度为w。s和t的编号从1开始。
输出格式:
一个整数,代表对于每组数据能够访问每个摊铺至少一次的方案的最小行动长度。
输入输出样例
输入样例#1:
3
1 2 3
1 3 3
输出样例#1:
9
说明
1≤N≤50000,1≤w≤1000
/*
这题可以证明是求边权之和*2-最长链.
bfs从根的左树和右树分别跑最长链取大.
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define MAXN 50001
using namespace std;
int head[MAXN],n,m,cut,ans,maxans,ans1,ans2,maxt,dis[MAXN],tot,fa[MAXN],tot1,tot2;
struct data{int v,next,x;}e[MAXN*2];
bool b[MAXN];
int read1()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
void add(int u,int v,int z)
{
e[++cut].v=v;
e[cut].next=head[u];
e[cut].x=z;
head[u]=cut;
}
void dfs(int u,int f)
{
fa[u]=f;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].v;
if(f!=v&&!fa[v])
{
if(u==1)
{
if(!tot1) tot1=v,ans1=e[i].x;
else tot2=v,ans2=e[i].x;
}
tot+=e[i].x;
dfs(v,u);
}
}
}
void spfa(int s)
{
int u,v;
memset(dis,-1,sizeof dis);
memset(b,0,sizeof b);
queue<int>q;q.push(s);dis[s]=0;
while(!q.empty())
{
u=q.front();q.pop();b[u]=false;
for(int i=head[u];i;i=e[i].next)
{
v=e[i].v;
if(v==1) continue;
if(dis[v]==-1)
{
dis[v]=dis[u]+e[i].x;
if(dis[v]>ans)
{
ans=dis[v];
maxt=v;
}
if(!b[v]) b[v]=true,q.push(v);
}
}
}
}
int main()
{
int x,y,z;
n=read1();
for(int i=1;i<=n-1;i++)
{
x=read1(),y=read1(),z=read1();
add(x,y,z);add(y,x,z);
}
dfs(1,1);
spfa(tot1);
ans+=ans1;
maxans=max(maxans,ans);
ans=0;spfa(tot2);ans+=ans2;
maxans=max(maxans,ans);
printf("%d",2*tot-maxans);
return 0;
}
洛谷比赛 U5442 买(最长链)的更多相关文章
- 洛谷 - P1434 - 滑雪 - 有向图最长链
https://www.luogu.org/problemnew/show/P1434 有向图的最长链怎么求?有环肯定不行,这里保证无环.(否则应该使用toposort先求出所有不带环的位置) 设dp ...
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释
P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...
- 洛谷p3384【模板】树链剖分题解
洛谷p3384 [模板]树链剖分错误记录 首先感谢\(lfd\)在课上调了出来\(Orz\) \(1\).以后少写全局变量 \(2\).线段树递归的时候最好把左右区间一起传 \(3\).写\(dfs\ ...
- 洛谷 P3384 【模板】树链剖分
树链剖分 将一棵树的每个节点到它所有子节点中子树和(所包含的点的个数)最大的那个子节点的这条边标记为"重边". 将其他的边标记为"轻边". 若果一个非根节点的子 ...
- 洛谷P3459 [POI2007]MEG-Megalopolis(树链剖分,Splay)
洛谷题目传送门 正解是树状数组维护dfn序上的前缀和,这样的思路真是又玄学又令我惊叹( 我太弱啦,根本想不到)Orz各路Dalao 今天考了这道题,数据范围还比洛谷的小,只有\(10^5\)(害我复制 ...
- 树剖模板(洛谷P3384 【模板】树链剖分)(树链剖分,树状数组,树的dfn序)
洛谷题目传送门 仍然是一个板子. 不过蒟蒻去学了一下BIT维护区间修改区间求和,常数果真十分优秀 设数列为\(a_i\),差分数组\(d_ i=a_ i-a_ {i-1}\),前缀和\(s_i=\su ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 洛谷比赛 堕落的Joe
/*暴力50*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 ...
随机推荐
- 安装 pybloomfilter
1.在windows的cmd下,使用 pip install pybloomfiltermmap 命令安装,pybloomfiltermmap 时报错 ,错误信息如下 根据错误信息分析,报错原因是需要 ...
- 关于win10安卓真机调试无法找到设备的问题
之前在win10系统上调试安卓设备,usb接好了,结果居然没有找到设备. 一般出现这种情况可能是电脑的驱动没装好. 于是找了驱动人生大佬来诊断,确实是少了安卓usb驱动. 正常来说用驱动人生装个usb ...
- Eclipse怎么升级版本
java工程上右键——选择Properties——Project Faces——右边java项选择相应的版本就OK了
- Ubuntu系统开机后不能正常使用——问题解决记录
1.开机后桌面内容没了,搜狗输入法不能使用了,终端不能打开了 问题原因:上次关机前为了解决解压文件中文乱码问题,在/etc/profile末尾加了如下两行:(但事实上如下两行根本不能解决中文乱码问题) ...
- C#中判断文件夹或文件是否存在的方法
一.根据虚拟路径获取文件物理路径: string savePath = Server.MapPath("~/Uploads/RemoteDatum/"); 二.判断文件夹是否存在 ...
- Java 单个集合去重与两个集合去重
一.单个集合去重 描述: 去掉一个集合里重复的元素:将list集合转成hashSet集合,hashSet有自动去重的功能,再利用去重后的hashSet集合初始化一个新的list集合,此时这个list就 ...
- CSS3总结四:盒模型(box)
盒模型:标准盒模型.混杂盒模型 什么时候会触发混杂模式? 为什么要混杂模式渲染规则盒模型? box-sizing:content-box.border-box 关于盒模型的一些其他样式和属性值 一.盒 ...
- js点击发送验证码 xx秒后重新发送
用于一些注册类的场景,点击发送验证码,xx秒后重新发送. 利用 setTimeout 方法,xx秒后执行指定的方法,修改button的属性值,disabled为true时为灰色,不可点击. <! ...
- 1 C# 将对象序列化
public static string ObjectToXml(object obj) { using (MemoryStream memoryStream = new MemoryStream() ...
- 不升级Element-UI 版本为时间选择器增加标记功能
Element-UI里的date-picker是个优秀的时间选择器,支持的选项很多,定制型很强.不过date-picker在2.12版本之前并不支持自定义单元格样式,也就是2.12的cellClass ...