| 比赛 |
2025.12.13 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
巡逻 |
最终得分 |
100 |
| 用户昵称 |
李奇文 |
运行时间 |
0.471 s |
| 代码语言 |
C++ |
内存使用 |
4.90 MiB |
| 提交时间 |
2025-12-13 12:20:22 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
int n,k,tot=0,e1=1,e2=1,l1,l2;
int hd[N],nxt[N],to[N],w[N];
int fa[N],d[N];
int v[N],f[N];
void add(int x,int y,int z) {
to[++tot]=y;
nxt[tot]=hd[x];
w[tot]=z;
hd[x]=tot;
}
void dfs1(int u,int p,int z,int tp) {
d[u]=d[p]+z;
if(tp==2) fa[u]=p;
for(int i=hd[u];i;i=nxt[i]){
int y=to[i],zw=w[i];
if(y!=p) dfs1(y,u,zw,tp);
}
if(d[u]>d[e1]) e1=u;
}
void dfs2(int u,int p) {
for(int i=hd[u];i;i=nxt[i]){
int y=to[i];
if(y!=p){
if(v[u]&&v[y]) w[i]=-1;
dfs2(y,u);
l2=max(l2,f[u]+f[y]+w[i]);
f[u]=max(f[u],f[y]+w[i]);
}
}
}
int main() {
freopen("xunluo.in","r",stdin);
freopen("xunluo.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>k;
for(int i(1);i<n;++i){
int x,y;
cin>>x>>y;
add(x,y,1);
add(y,x,1);
}
dfs1(1,0,0,1);
dfs1(e1,0,0,2);
l1=d[e1];
if(k==1){
cout<<2*(n-1)-l1+1<<"\n";
}else {
for(int i(e1);i;i=fa[i]) v[i]=1;
dfs2(1,0);
cout<<n*2-l1-l2<<"\n";
}
return 0;
}