[APIO 2010] 巡逻
[题目链接]
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 ; }
[APIO 2010] 巡逻的更多相关文章
- [APIO 2010] [LOJ 3144] 奇怪装置 (数学)
[APIO 2010] [LOJ 3144] 奇怪装置 (数学) 题面 略 分析 考虑t1,t2时刻坐标相同的条件 \[\begin{cases} t_1+\lfloor \frac{t_1}{B} ...
- 【BZOJ 1911】【APIO 2010】特别行动队
http://www.lydsy.com/JudgeOnline/problem.php?id=1911 夏令营里斜率优化的例题,我调了一晚上,真是弱啊. 先推公式吧($sum_i$表示$x_1 \d ...
- [bzoj 1911][Apio 2010]特别行动队(斜率优化DP)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1911 分析: 首先可以的到裸的方程f[i]=max{f[j]+a*(Si-Sj)^2+b*(S ...
- [APIO 2010] 特别行动队
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1911 [算法] 设前i个士兵"修正"后的最大战斗力为fi 令su ...
- BZOJ 1911 (APIO 2010) 特别行动队
题目描述 你有一支由n名预备役士兵组成的部队,士兵从1到n编号,要将他们拆分成若干特别行动队调入战场.出于默契考虑,同一支特别行动队中队员的编号应该连续,即为形如(i,i+1,-,i+k)的序列. 编 ...
- APIO 2010 特别行动队 斜率优化DP
Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如 (i ...
- DP的优化总结
一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\l ...
- [总结]一些 DP 优化方法
目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...
- 如何使用本地账户"完整"安装 SharePoint Server 2010+解决“New-SPConfigurationDatabase : 无法连接到 SharePoint_Config 的 SQL Server 的数据 库 master。此数据库可能不存在,或当前用户没有连接权限。”
注:目前看到的解决本地账户完整安装SharePoint Server 2010的解决方案如下,但是,有但是的哦: 当我们选择了"完整"模式安装SharePointServer201 ...
随机推荐
- 前端Canvas思维导图笔记
看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记
- Leetcode0100--Same Tree 相同树
[转载请注明]http://www.cnblogs.com/igoslly/p/8707664.html 来看一下题目: Given two binary trees, write a functio ...
- linux ssh 经常断开 的解决方法
1.现象 在linux ,用ssh进行远程连接时,经常会发生长时间后断线,或者是无响应,就像卡住的感觉(键盘输入不进去). 2.解决方法 在ssh客户端的linux设置 # sudo vim /etc ...
- 使用std::cout不能输出显示
在测试一行函数时,出现std::cout不能输出的情况,找不到原因. 1. 只好从main函数第一行,开始测试,直到发现一个函数 o_Initer.ekf_filter(filter, ...
- SLAM: VSLAM扫盲之旅
在<机器人手册> 第2卷,这本书里面,第23章讲述了:三维视觉和基于视觉的实时定位于地图重建.在第37章里面,讲述了 同时定位与建图.指出了SLAM的三种基本方法. 一种是EKF的方法,但 ...
- VS2012 +OpenCv2.4.4配置
使用OpenCV少了数据读取.填充.存储的麻烦. 转载于opencv官网:对于2010和2.43的配置可以直接挪用到新配置环境 http://www.opencv.org.cn/index.php/V ...
- PHP并发IO编程实践
PHP相关扩展 Stream:PHP内核提供的socket封装 Sockets:对底层Socket API的封装 Libevent:对libevent库的封装 Event:基于Libevent更高级的 ...
- S-HR薪酬项目与核算表的关系
- 第1章 面向对象的JavaScript
针对基础知识的每一个小点,我都写了一些小例子,https://github.com/huyanluanyu1989/DesignPatterns.git,便于大家理解,如有疑问,大家可留言给我,最近工 ...
- WERTYU(WERTYU, UVa10082)
把手放在键盘上时,稍不注意就会往右错一 位.这样,输入Q会变成输入W,输入J会变成输 入K等.键盘如图所示. 输入一个错位后敲出的字符串(所有字母均大写),输出打字员本来想打出的句子.输入保 证合法, ...