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 买(最长链)的更多相关文章

  1. 洛谷 - P1434 - 滑雪 - 有向图最长链

    https://www.luogu.org/problemnew/show/P1434 有向图的最长链怎么求?有环肯定不行,这里保证无环.(否则应该使用toposort先求出所有不带环的位置) 设dp ...

  2. 洛谷比赛 「EZEC」 Round 4

    洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...

  3. 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释

    P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...

  4. 洛谷p3384【模板】树链剖分题解

    洛谷p3384 [模板]树链剖分错误记录 首先感谢\(lfd\)在课上调了出来\(Orz\) \(1\).以后少写全局变量 \(2\).线段树递归的时候最好把左右区间一起传 \(3\).写\(dfs\ ...

  5. 洛谷 P3384 【模板】树链剖分

    树链剖分 将一棵树的每个节点到它所有子节点中子树和(所包含的点的个数)最大的那个子节点的这条边标记为"重边". 将其他的边标记为"轻边". 若果一个非根节点的子 ...

  6. 洛谷P3459 [POI2007]MEG-Megalopolis(树链剖分,Splay)

    洛谷题目传送门 正解是树状数组维护dfn序上的前缀和,这样的思路真是又玄学又令我惊叹( 我太弱啦,根本想不到)Orz各路Dalao 今天考了这道题,数据范围还比洛谷的小,只有\(10^5\)(害我复制 ...

  7. 树剖模板(洛谷P3384 【模板】树链剖分)(树链剖分,树状数组,树的dfn序)

    洛谷题目传送门 仍然是一个板子. 不过蒟蒻去学了一下BIT维护区间修改区间求和,常数果真十分优秀 设数列为\(a_i\),差分数组\(d_ i=a_ i-a_ {i-1}\),前缀和\(s_i=\su ...

  8. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  9. 洛谷比赛 堕落的Joe

    /*暴力50*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 100010 ...

随机推荐

  1. JavaScript设计模式(装饰者模式)

    一.模拟传统面向对象语言的装饰者模式: 假设我们在编写一个飞机大战的游戏,随着经验值的增加,我们操作的飞机对象可以升级成更厉害的飞机,一开始这些飞机只能发射普通的子弹,升到第二级时可以发射导弹,升到第 ...

  2. 【原创】大叔经验分享(74)nginx对静态文件加速

    通过location配置 location ~ \.html$ { add_header 'Cache-Control' 'no-cache'; } location ~ \.(js|css|gif| ...

  3. 【原创】大叔经验分享(61)kudu rebalance报错

    kudu rebalance命令报错 terminate called after throwing an instance of 'std::regex_error' what(): regex_e ...

  4. XVS 操作

    1. xvs安装   rpm -i  ***.rpm 2.获取license root@ubuntu:/usr/local/xvs# ./xvs -L .Host ID: 16b3d720584704 ...

  5. 闭包问题for(var i=0;i<10;i++){ setTimeout(function(){ console.log(i)//10个10 },1000) }

    for(var i=0;i<10;i++){ setTimeout(function(){ console.log(i)//10个10 },1000) } 遇到这种问题 如何用解决呢 for(v ...

  6. idea 党用快捷键

    实用快捷键: Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*...*/ )Ctrl+D 复制行Ctrl+X 删除行快速修复 alt+enter (modify/cast)代码提示 a ...

  7. python之字典二 内置方法总结

    Python字典包含了以下内置方法: clear()函数用于删除字典内所有元素 dict1 = {, 'Class': 'First'} print('the start len %d' % len( ...

  8. promises的深入学习

    Promise 的含义 § ⇧ Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供 ...

  9. 第五章·Logstash深入-日志收集

    1.Logstash收集单个日志到文件中 file模块收集日志 不难理解,我们的日志通常都是在日志文件中存储的,所以,当我们在使用INPUT插件时,收集日志,需要使用file模块,从文件中读取日志的内 ...

  10. 第十五章·Kibana深入-Dev Tools及Lucene语法

    Dev Tools介绍 Dev Tools 页面包含开发工具,您可以使用这些Dev Tools与Kibana中的数据进行交互. 原先的交互式控制台Sense,使用户方便的通过浏览器直接与Elastic ...