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;
}

最新文章

  1. mysql 远程连接数据库的二种方法
  2. mysql导入导出,及错误记录
  3. elasticsearch 集群搭建
  4. 使用基于关系的选择器和伪类选择器创建纯CSS无JavaScript的鼠标移动到上面即可显示的下拉菜单
  5. 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
  6. Android Touch(4)我不知道的MotionEvent(*)
  7. Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)
  8. spring beans源码解读之--bean definiton解析器
  9. 插入数据前设置字符编码为utf8
  10. ※数据结构※→☆非线性结构(tree)☆============二叉树 顺序存储结构(tree binary sequence)(十九)
  11. Java之File类
  12. Tomcat中的c3p0数据库连接池的释放
  13. 程序猿必知必会Linux命令之awk
  14. 一个redis因为关闭快照无法连接的BUG
  15. selenium常用的模块
  16. python,关于这个里边的私有方法(private)、保护方法(protected)、公开方法(public)
  17. Linux命令之ls
  18. springcloud 熔断处理
  19. oc 代码块的使用
  20. OpenStack IceHouse 部署 - 2 - 网络与软件环境初始化

热门文章

  1. 协议相关(HTTP,TCP,webservice,socket)
  2. X86逆向4:VMP壳内寻找注册码
  3. Codeforces1263D-Secret Passwords
  4. 怎样理解 MVVM ( Model-View-ViewModel ) ?
  5. OnMouseWheel的通常处理
  6. [js]EasyUI导出数据表格(Export DataGrid)
  7. Flask:上下文管理
  8. CSS3总结三:文字(text)/字体、文本、文本装饰、多列
  9. Python字符串、组合数据类型练习
  10. 跨平台编译ceres for Android