E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
BZOJ1912
【
bzoj1912
】[Apio2010]patrol 巡逻
1912:[Apio2010]patrol巡逻TimeLimit:4SecMemoryLimit:64MBSubmit:1740Solved:907[Submit][Status][Discuss]DescriptionInput第一行包含两个整数n,K(1≤K≤2)。接下来n–1行,每行两个整数a,b,表示村庄a与b之间有一条道路(1≤a,b≤n)。Output输出一个整数,表示新建了K条道路后
Joky_2002
·
2020-08-02 16:35
动态规划
C
bzoj
树上最长链
bzoj1912
[Apio2010]patrol 巡逻(dp求树上最长链)
显然答案一开始是n-1#include#include#includeusingnamespacestd;#definelllonglong#defineinf0x3f3f3f3f#defineN100010inlinechargc(){staticcharbuf[1'9'){if(ch=='-')f=-1;ch=gc();}while(ch>='0'&&chmx[x])mx2[x]=mx[x],
Icefox_zhx
·
2020-08-02 16:27
bzoj
-----树-------
BZOJ1912
: 巡逻 题解
这道题很像topcoder里的一道题kingdomtour,是它的弱化版,可以看我的那道题的博客,一个树型dp,复杂度O(nk2)O(nk2)#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#
IcePrincess_1968
·
2020-08-02 16:26
树型dp
[
BZOJ1912
][Apio2010]patrol 巡逻(树上最长链)
======这里放传送门======题解因为一开始的图是一棵树,所以在不加边的情况下每条边一定会被经过两次,巡逻的代价固定为ans=2∗(n−1)。如果在树上加一条边,那么就会有一条链不需要走两次,这条链的起点和终点就是新边的起点和终点。那么如果只能在树上加一条边的话,和这条边构成环的链一定是越长越好。于是找树上最长链就能解决问题。第一次求最长链的时候可以用dfs也可以DP,这里用了dfs,方法是
FromATP
·
2020-08-02 15:48
BZOJ
感觉很有趣
DP好难啊
【
bzoj1912
】[Apio2010]patrol 巡逻(树上最长链)
题目:我是超链接题解:显然如果不添加边的话,费用就是固定的ans=2*(n-1)新建的路一定要放到环中,两个村庄之前有边就不要再建了。。新建路的目的就是形成环,越大越好哎这个K=1好像ok的,那我们找一个树上最长链吧,答案就是ans-len+1?这个K=2怎么办啊?题目中要求每条边必须经过一次,也就是说为了满足这个条件,上一次加边之后本来可以只经过一次的某些边可能强行经过两次,这个环与第一个链重合
wwyx2001
·
2020-08-02 15:03
dp
【题解】
bzoj1912
(同洛谷P3629)[APIO2010]巡逻 树的直径
题目链接Input第一行包含两个整数n,K(1≤K≤2)。接下来n–1行,每行两个整数a,b,表示村庄a与b之间有一条道路(1≤a,b≤n)。Output输出一个整数,表示新建了K条道路后能达到的最小巡逻距离。SampleInput8112313453758556SampleOutput11HINT10%的数据中,n≤1000,K=1;30%的数据中,K=1;80%的数据中,每个村庄相邻的村庄数不
不进清北不改名
·
2020-08-02 13:42
洛谷
bzoj
APIO
树的直径
[
BZOJ1912
][Apio2010]patrol 巡逻(dfs+并查集+树形dp)
题目描述传送门题解k=1时,首先使所有的路权都为1,求树上最长链,答案为2×(n-1)-(len1-1)k=2时,在k=1的基础上,将第一次选取的链上的边权都赋为-1,然后再求树的直径记为len2,答案为2×(n-1)-(len1-1)-(len2-1)注意第二次求树的直径有负边权dfs就不管用了,用树形dp代码#include #include #include usingnamespacest
Clove_unique
·
2016-05-03 14:00
dp
DFS
并查集
bzoj
apio
【
bzoj1912
】 巡逻 树的直径
当k=1时,显然只要求出树的直径(最长链)的长度l,答案即为2*(n-1)-l+1,也就是在最长链的两个端点处建立一条新的路。 当k=2时,如果直接dp,可能会有重复的部分,因此首先,我们将最长链经过的边权值都赋成-1,再进行dp。这样,如果我们选择的两条链中有一条是最长链,重复的部分就不会重复计算。如果都不是,那么我们可以证明重复的那一段一定是最长链中的一部分。简单的证明如下: 首先
lych_cys
·
2015-11-28 11:00
DFS
树的直径
【
bzoj1912
】 APIO2010patrol巡逻 树的直径
树的直径相关吧。首先k=1时,非常简单只需要在直径的两端连一条边。当k=2时,先在直径的两端连一条边,之后把直径上每条边边权变为-1,再求一遍直径,为什么呢?边权变成-1,等价于多走两遍。注意第二次不能用两次bfs,因为有负数边。#include #include #include #include #include #include #definemaxn100010 usingnamespa
u012288458
·
2015-10-13 23:00
【
BZOJ1912
】【Apio2010】巡逻 树上最长链(才不是树的直径呢)
链接:#include intmain() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/45062689"); }题解:对于k==0的情况:我们发现遍历一棵树最后回到原点,那么对于所有的边,我们都是走过去,再走回来。答案(n−1 #include #include #include #in
Vmurder
·
2015-04-15 17:00
巡逻
BZOJ1912
Apio2010
树上最长链
上一页
1
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他