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. URI解析

    这里主要参考 RFC3986 文档. URI可以分为URL,URN或同时具备locators 和names特性的一个东西.URN作用就好像一个人的名字,URL就像一个人的地址.换句话说:URN确定了东 ...

  2. 并不对劲的复健训练-bzoj5250:loj2473:p4365:[九省联考2018]秘密袭击

    题目大意 有一棵\(n\)(\(n\leq 1666\))个点的树,有点权\(d_i\),点权最大值为\(w\)(\(w\leq 1666\)).给出\(k\)(\(k\leq n\)),定义一个选择 ...

  3. UI语言杂集

    最适合做 GUI 的是 DSL 或者 XML(以及 XML 的扩展)之类的标记语言,而不是编程语言. 例如 Qt 的 QML,Android 的 XML 或者 WPF 的 XAML 以及大家都再熟悉不 ...

  4. js 动态添加Table tr,选中与不选中checkbox行数NO的变化

    首次加载进入页面,如图: 注:Table是在js中拼接字符串循环动态添加的(拼接字符串,详见之前随笔) 点击Line2 checkbox后,效果如图: 实现的效果就是: 点击checkbox — 显示 ...

  5. js大神成长指路

    随着我的成长,我的兴趣也在不断地分化,他们似乎都是不相关的领域.我喜欢数学就像我喜欢历史一样.我的目标是成为一个多才多艺的人——一个学者——在许多领域都能成为杰出的人才.这是一项艰巨的任务.突然间,我 ...

  6. vccode配合svn

    先安装插件 要实现版本对比.需要先安装svn服务端 vue插件 微信小程序插件

  7. 第二十六篇 jQuery 学习8 遍历-父亲兄弟子孙元素

    jQuery 学习8 遍历-父亲兄弟子孙元素   jQuery遍历,可以理解为“移动”,使用“移动”还获取其他的元素.   什么意思呢?老师举一个例子: 班上30位同学,我是新来负责教这个班学生的老师 ...

  8. 1-win10配置 Vagrant 环境

    1-win10配置 Vagrant 环境 2019.9.13 Vagrant 概述 vagrant是一个操作虚拟机的工具.是一个基于Ruby的工具,用于创建和部署虚拟化开发环境. 通过命令和配置文件来 ...

  9. python常用模块:标准文件及模块练习

    1.请写出规范目录 并解释各文件夹的作用 bin 执行文件core 核心业务逻辑conf 配置文件lib 库.公共代码.第三方模块db 数据分析log 日志文件readme 文本文档 2.改造atm+ ...

  10. shell脚本基础和grep文本处理工具企业应用1

      bash特性及bash脚本编程初步: 用户要跟计算机交互就需要有终端,比如:显示器.键鼠等,在终端有附着的接口程序 GUI:KDE.GNome.Xfce CLI:/etc/shells bash ...