题目描述

输入

输出

样例输入

4 2 1 3

1 2

2 3

3 4

样例输出

2

数据范围

解法

预处理出两个陌生人走到各个点的距离。

从石神处开始dfs,判断走到每一个点是否会被抓;

如果会,则计算答案,并给超级答案取最大值;

如果不会,继续走下去。


计算答案只需简单的运算,O(1)即可。

代码

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define ll long long
#define ln(x,y) int(log(x)/log(y))
#define sqr(x) ((x)*(x))
using namespace std;
const char* fin="track.in";
const char* fout="track.out";
const int inf=0x7fffffff;
const int maxn=200007,maxm=maxn*2;
int n,m1,m2,m3,i,j,k,tot,ans;
int fi[maxn],la[maxm],ne[maxm];
int dis[3][maxn];
void add_line(int a,int b){
tot++;
ne[tot]=fi[a];
la[tot]=b;
fi[a]=tot;
}
void getdis(int v,int from,int deep,int id){
int i,j,k;
dis[id][v]=deep;
for (k=fi[v];k;k=ne[k]) if (la[k]!=from) getdis(la[k],v,deep+1,id);
}
void dfs(int v,int from,int time){
int i,j,k=inf;
/*if (v!=m1) {
if (dis[1][v]/2<=dis[0][v]){
if (dis[1][v]%2) k=min(k,2);
else k=0;
}
if (dis[2][v]/2<=dis[0][v]){
if (dis[2][v]%2) k=min(k,2);
else k=0;
}
if (k!=inf){
ans=max(time+k,ans);
return ;
}
}*/
if (v==m1 || dis[1][v]/2+dis[1][v]%2>dis[0][v] && dis[2][v]/2+dis[2][v]%2>dis[0][v])
for (k=fi[v];k;k=ne[k])
if (la[k]!=from){
dfs(la[k],v,time+3);
}
ans=max(min(dis[1][v]/2*3+(dis[1][v]%2?2:0),dis[2][v]/2*3+(dis[2][v]%2?2:0)),ans);
}
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d%d%d%d",&n,&m1,&m2,&m3);
for (i=1;i<n;i++){
scanf("%d%d",&j,&k);
add_line(j,k);
add_line(k,j);
}
getdis(m1,0,0,0);
getdis(m2,0,0,1);
getdis(m3,0,0,2);
dfs(m1,0,-2);
printf("%d",ans);
return 0;
}

启发

多出数据来调整细节。

最新文章

  1. 【Win 10应用开发】SplitView控件
  2. MySQL正则表达式
  3. BizTalk动手实验(一)安装BizTalk Server 2010开发环境
  4. 响应式注意要添加“视口”约束标记---viewport
  5. VC2013的一个bug
  6. PowerDesigner(六)-物理数据模型(PDM逆向工程)(转)
  7. 对javascript this的理解
  8. Java switch-case
  9. WPF 采用Border创建圆角
  10. python绝技 — 用Scapy解析TTL字段的值
  11. react学习笔记-01
  12. unity3d自带帮助文档的打开方法
  13. (简单) POJ 2406 Power Strings,扩展KMP。
  14. ASP.NET Core文件上传与下载(多种上传方式)
  15. 出错:Error creating bean with name &#39;studentServiceImpl&#39;: Unsatisfied dependency expressed through field &#39;studentMapper&#39;;
  16. DWM1000 三基站一标签定位HEX
  17. js基本知识
  18. Oracle学习——dmp文件(表)导入与导出
  19. 项目总结一:情感分类项目(emojify)
  20. LINQ之路14:LINQ Operators之排序和分组(Ordering and Grouping)

热门文章

  1. China Final J - Mr.Panda and TubeMaster
  2. 19-10-18-Night-U
  3. PAT甲级——A1020 Tree Traversals
  4. Git同平台下多个账号配置
  5. [Day2] Nginx静态文件
  6. jmeter参数化之用户自定义变量
  7. nodejs+express 初学(二)
  8. c++ 链接mysql:error LNK2019: 无法解析的外部符号
  9. os.path.join 的用法
  10. ubuntn系统下将文件拷贝到优盘中及挂载概念理解