洛谷比赛 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 ...
随机推荐
- 并不对劲的CF1239B&C&D Programming Task in the Train to Catowice City
CF1239B The World Is Just a Programming Task 题目描述 定义一个括号序列s是优秀的,当且仅当它是以下几种情况的一种: 1.|s|=0 2.s='('+t+' ...
- Vasya and Magic Matrix CodeForces - 1042E (概率dp)
大意:给定n*m矩阵, 初始位置(r,c), 每一步随机移动到权值小于当前点的位置, 得分为移动距离的平方, 求得分期望. 直接暴力dp的话复杂度是O(n^4), 把距离平方拆开化简一下, 可以O(n ...
- flume收集日志直接sink到oracle数据库
因为项目需求,需要保存项目日志.项目的并发量不大,所以这里直接通过flume保存到oracle 源码地址:https://github.com/jaxlove/fks/tree/master/src/ ...
- C# 定义热键
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 服务端相关知识学习(六)Zookeeper client
Zookeeper的client是通过Zookeeper类提供的.前面曾经说过,Zookeeper给使用者提供的是一个类似操作系统的文件结构,只不过这个结构是分布式的.可以理解为一个分布式的文件系统. ...
- 初识python之了解其背景和安装
1.Python的发展 Python语言诞生于1990年,由Guido van Rossum设计并领导开发.1989年12月,Guido考虑启动一个开发项目以打发圣诞节前后的时间,所以决定为当时正在构 ...
- 转:GitHub团队项目合作流程
转自:https://www.cnblogs.com/schaepher/p/4933873.html GitHub团队项目合作流程 已在另一篇博客中写出关于以下问题的解决,点此进入: 同步团队项 ...
- C# 移除数组中重复项
方法一: static void Main(string[] args) { //看到数组的第一反应应该是排序 ,,,,,,,}; //去掉数组中重复的项 //先排序 arrayAsc(array); ...
- 2 java开发环境的配置步骤
1 首先需要下载JDK(以java se development kit java标准版开发包) 8.0 如果只是单纯的运行java程序则只需要安装JRE(java runtime envirome ...
- ASE19团队项目alpha阶段model组 scrum2 记录
本次会议于11月4日,19时整在微软北京西二号楼sky garden召开,持续25分钟. 与会人员:Jiyan He, Kun Yan, Lei Chai, Linfeng Qi, Xueqing W ...