[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=1912

[算法]

树的直径

[代码]

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010 int i,n,l1,l2,tot,u,v,k,now;
int head[MAXN],pre[MAXN],d[MAXN];
vector< int > path;
pair< int,pair<int,int> > tmp; struct edge
{
int to,w,nxt;
} e[MAXN << ]; inline void addedge(int u,int v,int w)
{
tot++;
e[tot] = (edge){v,w,head[u]};
head[u] = tot;
}
inline void dfs1(int u,int fa)
{
int i,v,w;
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
if (v == fa) continue;
dfs1(v,u);
if (d[u] + d[v] + w > l1)
{
l1 = d[u] + d[v] + w;
tmp = make_pair(i,make_pair(pre[u],pre[v]));
}
if (d[v] + w > d[u])
{
d[u] = d[v] + w;
pre[u] = i;
}
}
}
inline void dfs2(int u,int fa)
{
int i,v,w;
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
w = e[i].w;
if (v == fa) continue;
dfs2(v,u);
if (d[u] + d[v] + w > l2) l2 = d[u] + d[v] + w;
d[u] = max(d[u],d[v] + w);
}
}
int main()
{ scanf("%d%d",&n,&k);
for (i = ; i < n; i++)
{
scanf("%d%d",&u,&v);
addedge(u,v,);
addedge(v,u,);
}
l1 = ;
memset(d,,sizeof(d));
dfs1(,);
now = tmp.second.first;
while (now != )
{
path.push_back(now);
now = pre[e[now].to];
}
path.push_back(tmp.first);
now = tmp.second.second;
while (now != )
{
path.push_back(now);
now = pre[e[now].to];
}
for (i = ; i < path.size(); i++)
{
e[path[i]].w *= -;
e[path[i] ^ ].w *= -;
}
l2 = ;
memset(d,,sizeof(d));
dfs2(,);
if (k == ) printf("%d\n", * (n - ) - l1 + );
else printf("%d\n", * n - l1 - l2); return ; }

最新文章

  1. wifi万能钥匙自媒体平台开放注册(付注册流程)
  2. View Controller Relationships
  3. 14.KVM安装之脚本和镜像目录树准备
  4. 微信浏览器内置JavaScript 对象:WeixinJSBridge
  5. ubuntu 增加新硬盘
  6. 【转】教你爱上Blocks(闭包)
  7. mac的svn之cornerstone简易教程
  8. Ajax,纯Js+Jquery
  9. 写移动端必备的meta标签
  10. android 学习 Spinner控件的使用
  11. 第一次博客作业(初识C++)
  12. conda环境里安装pydot
  13. hadoop之editlogs和fsimage
  14. 关于操作Access数据库jdk选择问题
  15. 用Service实现断点下载
  16. UVa 11624 大火蔓延的迷宫
  17. springboot-mongodb的多数据源配置
  18. 关于新塘 M0 M4添加库文件的说明
  19. linux gitlab-ctl reconfigure报错问题修复 502
  20. canvas+js画饼状图

热门文章

  1. android黑科技系列——Android中新型安全防护策略
  2. 【Oracle】OGG(Oracle GoldenGate)简介及搭建过程
  3. 用SQL Server验证用户名和密码
  4. EnforceLearning-主动强化学习
  5. css基础四
  6. (转)基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码
  7. Git更新代码
  8. java操作Excel的poi 设置单元格的对其方式
  9. 记一次获得 3 倍性能的 go 程序优化实践,及 on-cpu / off-cpu 火焰图的使用
  10. 【JavaScript高级进阶】JavaScript变量/函数提升的细节总结