链接:https://ac.nowcoder.com/acm/contest/369/C
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

小A给你了一棵树,对于这棵树上的每一条边,你都可以将它复制任意(可以为0)次(即在这条边连接的两个点之间再加一条边权相同的边),求所有可能新形成的图中欧拉路的最短长度

欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次

输入描述:

第一行一个数 n ,表示节点个数

接下来 n-1 行,每行三个整数 u,v,w,表示有一条 u 到 v 边权为 w 的无向边

保证数据是一棵树

输出描述:

一行一个整数,表示答案

示例1

输入

复制

4
1 2 1
1 3 1
1 4 2

输出

复制

5

说明

一种可能的方案为复制 <1,2,1> 这条边一次,欧拉路为4->1->2->1->3

备注:

1≤n≤2×10^5
1≤ui,vi≤n
1≤wi≤10^4

题意:树加边求最小权值的欧拉路

题解:树加边求最小权值的欧拉路=树的权值*2-树的直径(当时没想到直径问题,醉了~~)教训:做题要多画图啊,别凭空想象

知道是求直径问题就是水题了~~~上代码:

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
typedef long long ll;
const int MAX = 1e6+100;
struct hh{int u,v,w;int nt;
}a[MAX];
int dis[MAX],head[MAX];
bool vis[MAX];
int n,tot,point,len;
ll ans;//注意要用long long
void add(int u,int v,int w){a[tot].v=v;a[tot].u=u;a[tot].w=w;a[tot].nt=head[u];head[u]=tot++;
}
void bfs(int s){//找树的直径模板memset(vis,false,sizeof(vis));//第二次要初始化,第一次一块带上了,嘻嘻~~不超时memset(dis,0,sizeof(dis));//第二次要初始化,第一次一块带上了,嘻嘻~~不超时queue<int> q;q.push(s);vis[s]=1;while(!q.empty()){int x=q.front();q.pop();for (int i = head[x]; ~i; i = a[i].nt){int y=a[i].v;if(!vis[y]){dis[y]=dis[x]+a[i].w;if(len<dis[y]){len=dis[y];point=y;}vis[y]=true;q.push(y);}}}
}
int main(){cin >> n;memset(head,-1,sizeof(head));for (int i = 0; i < n-1;i++){int u,v,w;cin >> u >> v >> w;add(u,v,w);//无向边,为双向的add(v,u,w);ans+=w<<1;//树的权值*2}len=0;bfs(1);//找到最远点len=0;//len为树的直径~~,记住要初始化!bfs(point);//找直径,必须跑两边,记住!!!cout << ans-len << endl;return 0;
}

小A与欧拉路 (树加边求最小权值欧拉路+树的直径)相关推荐

  1. Gym - 101889F Fundraising(树状数组求带权最长上升子序列)

    ICPC Latin American Regional – 2017 Problem F – Fundraising Author: Paulo Cezar Pereira Costa, Brasi ...

  2. 【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012 题意:维护一个数列,开始时没有数值,之后会有两种操作, Q L :查询数列末 ...

  3. Governing sand(权值线段树/主席树)

    链接:https://ac.nowcoder.com/acm/contest/887/C 来源:牛客网 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 65536K,其他语言13107 ...

  4. 普通树与二叉树的相互转化及哈夫曼树的了解

    普通树与二叉树的相互转化及哈夫曼树的了解 二叉树与普通树的转化 二叉树的种种特性使得它更便于处理,如果能将普通树转化成二叉树就好了. 普通树 -> 二叉树 回忆孩子兄弟表示法,有第一孩子域(左孩 ...

  5. 树套树 ----- P1975 [国家集训队]排队(树状数组套权值线段树求动态逆序对)

    解题思路: 首先我们知道交换两个数a[l]和a[r]a[l]和a[r]a[l]和a[r]影响到的区间是[l+1,r−1][l+1,r-1][l+1,r−1] 对于a[l]a[l]a[l],我们要减去[ ...

  6. 【BZOJ2653】middle,主席树(非权值线段树)维护序列和信息+二分答案

    传送门 写在前面:虽然这是一道我再也不想写的题目,但很好很有价值 思路: cxlove大神: 要求中位数最大,首先二分中位数,然后判断可行不可行. 判断X可行不可行,对于区间内的数,凡是>=X的 ...

  7. 【bzoj4605】崂山白花蛇草水 权值线段树套KD-tree

    题目描述 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实力,他轻松地进了山东省省队,现在便是他履行诺言的时候了.蒟蒻Bob ...

  8. 赫夫曼树介绍、赫夫曼树的性质、赫夫曼编码、赫夫曼树与赫夫曼编码的应用

    文章目录 赫夫曼树 1. 赫夫曼树介绍: 2. 赫夫曼树的创建过程: 3. 赫夫曼树的性质: 4. 赫夫曼编码: 5. 赫夫曼树与赫夫曼编码的c语言代码实现: 赫夫曼树 1. 赫夫曼树介绍: ​ 赫夫 ...

  9. C实现利用给定的权值构造哈夫曼树并进行哈夫曼编码

    哈夫曼树:给定N个权值作为N个叶子节点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的 ...

最新文章

  1. 大主子表关联的性能优化方法
  2. 疫情之下,武汉女生在家中答辩,获得国外博士学位!
  3. 关于$ORACLE_HOME/bin/oracle文件属性
  4. eclipse下新建py文件的辅助信息设置
  5. Swift之深入解析如何使用Xcode和LLDB v2修改UI元素
  6. hive 的条件判断(if、coalesce、case)
  7. c 语言 while break,26 C 语言中的break和continue - C 语言基础教程
  8. 从 DevOps 到 NoOps,Serverless 技术的落地方式探讨
  9. openshift 在win7上的实现
  10. 关于Java中“+”加运算符和“”向前移位运算符混合使用时出现的错误
  11. lombok标签_微服务之:springboot入门、Swagger、Lombok使用
  12. 使 VC2013 编写的程序运行在其它电脑上
  13. SOAPUI接口测试学习网站
  14. 《剑指offer》Java版全系列题解(2021版,持续更新!)
  15. McAfee:僵尸网新威胁远甚Conficker
  16. python正则匹配中文
  17. ArcGIS 图像合并至新栅格图层
  18. 元宇宙iwemeta:《时代》杂志新封面,元宇宙将改变一切
  19. 2021-07-06
  20. Java后台代码word转pdf文件下载(类库参考)附jar包

热门文章

  1. c语言延时100us程序,编写100MS软件延时程序 汇编语言编写延时程序
  2. linux命令之unzip
  3. 施工工地考勤防作弊通道系统,建筑工地通道系统管理方案
  4. java开源项目CrapApi接口管理系统
  5. 系统优化与lvs详解配置、haproxy
  6. 黑白棋,又叫翻转棋(Reversi)、苹果棋或奥赛罗棋(Othello)。棋盘共有8行8列共64格。开局时,棋盘正中央的4格先置放黑白相隔的4枚棋子。双方轮流落子,只要落子和棋盘上任一枚己方的棋子
  7. Flutter中的Provider(八)-多个Provider-MultiProvider
  8. Ubuntu中文输入法fcitx的配置与使用
  9. 嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>
  10. 微信小程序如何申请注册教程