[APIO 2010] 巡逻
2024-08-28 00:20:41
[题目链接]
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 ; }
最新文章
- wifi万能钥匙自媒体平台开放注册(付注册流程)
- View Controller Relationships
- 14.KVM安装之脚本和镜像目录树准备
- 微信浏览器内置JavaScript 对象:WeixinJSBridge
- ubuntu 增加新硬盘
- 【转】教你爱上Blocks(闭包)
- mac的svn之cornerstone简易教程
- Ajax,纯Js+Jquery
- 写移动端必备的meta标签
- android 学习 Spinner控件的使用
- 第一次博客作业(初识C++)
- conda环境里安装pydot
- hadoop之editlogs和fsimage
- 关于操作Access数据库jdk选择问题
- 用Service实现断点下载
- UVa 11624 大火蔓延的迷宫
- springboot-mongodb的多数据源配置
- 关于新塘 M0 M4添加库文件的说明
- linux gitlab-ctl reconfigure报错问题修复 502
- canvas+js画饼状图
热门文章
- android黑科技系列——Android中新型安全防护策略
- 【Oracle】OGG(Oracle GoldenGate)简介及搭建过程
- 用SQL Server验证用户名和密码
- EnforceLearning-主动强化学习
- css基础四
- (转)基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码
- Git更新代码
- java操作Excel的poi 设置单元格的对其方式
- 记一次获得 3 倍性能的 go 程序优化实践,及 on-cpu / off-cpu 火焰图的使用
- 【JavaScript高级进阶】JavaScript变量/函数提升的细节总结