
【最短路】P4408 [NOI2003]逃学的小孩
发布日期:2021-05-06 16:51:19
浏览次数:8
分类:技术文章
本文共 1462 字,大约阅读时间需要 4 分钟。
对于一张图上的任意三个点A,B,C 求max(min(dis[A][C],dis[B][C])+dis[A][B])
我们先确定A,B为树上直径,可以用反证法简单证一下
然后就可以对于A和B两个点算一下其他点到A/B的距离,然后枚举点C即可
代码
#includeusing namespace std;const int maxn=200000+5;int n,m,tot,st,ed;int head[maxn];long long dis1[maxn],dis2[maxn];struct edge{ int to,nxt; long long v;}e[maxn<<1];void add(int x,int y,long long z){ e[++tot].nxt=head[x]; head[x]=tot; e[tot].to=y; e[tot].v=z;}void dfs1(int x,int fa){ for(int i=head[x];i;i=e[i].nxt) { int to=e[i].to; int v=e[i].v; if(to==fa) continue; dis1[to]=dis1[x]+v; if(dis1[to]>dis1[st]) st=to; dfs1(to,x); }}void dfs2(int x,int fa){ for(int i=head[x];i;i=e[i].nxt) { int to=e[i].to; int v=e[i].v; if(to==fa) continue; dis2[to]=dis2[x]+v; if(dis2[to]>dis2[ed]) ed=to; dfs2(to,x); }}void dfss1(int x,int fa){ for(int i=head[x];i;i=e[i].nxt) { int to=e[i].to; int v=e[i].v; if(to==fa) continue; dis1[to]=dis1[x]+v; dfss1(to,x); }}void dfss2(int x,int fa){ for(int i=head[x];i;i=e[i].nxt) { int to=e[i].to; int v=e[i].v; if(to==fa) continue; dis2[to]=dis2[x]+v; dfss2(to,x); }}int main(){ scanf("%d%d",&n,&m); int x,y; long long z; for(int i=1;i<=m;i++) { scanf("%d%d%lld",&x,&y,&z); add(x,y,z); add(y,x,z); } dfs1(1,0); dfs2(st,0); long long tmp=dis2[ed]; memset(dis1,0,sizeof(dis1)); memset(dis2,0,sizeof(dis2)); dfss1(st,0); dfss2(ed,0); long long ans=0; for(int i=1;i<=n;i++) { if(i==st || i==ed) continue; ans=max(ans,min(dis1[i],dis2[i])); } printf("%lld",ans+tmp); return 0;}
发表评论
最新留言
不错!
[***.144.177.141]2025年03月28日 02时39分28秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
SAS-阶乘-do end
2019-03-04
想牵着你的手迎着春风奔跑
2019-03-04
html中图片上传预览功能
2019-03-04
简单背景图片,鼠标移动特效
2019-03-04
js,小程序共用java后端进行数据传输
2019-03-04
[python面向对象学习笔记十] eval函数
2019-03-04
ReID基础 | ReID工程中的一些小trick
2019-03-04
haystack安装后导致Django版本强制升级为3.2引发的不兼容性问题
2019-03-04
LINQ之Single,SingleOrDefault
2019-03-04
LINQ之ElementAt,ElementAtOrDefault
2019-03-04
OpenCV6边缘检测[Canny算法]
2019-03-04
Hadoop_Scala操作Hbase
2019-03-04
Scala_1.控制台打印,变量定义,函数定义
2019-03-04
Linux Vim操作-添加行号
2019-03-04
十五.Python异常处理
2019-03-04
c++备考期末必须看的知识点(一篇就够了)
2019-03-04
qt中初始化界面的几种方法
2019-03-04
【图论】游乐场
2019-03-04
【图论】【最短路】USACO 2.4 牛的旅行 (最短路)
2019-03-04
【图论】【最短路】工厂的烦恼
2019-03-04