P1099 树网的核

无根树,在直径上找到一条长度不超过s的路径,使得最远的点距离这条路径的距离最短;

首先两遍dfs找到直径(第二次找的时候一定要吧father[]清零)

在找到的直径下枚举长度不超过s的链,ans的下界是直径两端点到这条链距离的最小值;

然后将直径上的点都标记,再次求一下别的点到直径的距离。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int n,s;
int pre[maxn],last[maxn],other[maxn],len[maxn],l; void add(int x,int y,int z)
{
l++;
pre[l]=last[x];
last[x]=l;
other[l]=y;
len[l]=z;
} int dis[maxn],father[maxn],vis[maxn];
int l1,l2; void dfs(int x)
{
for(int p=last[x];p;p=pre[p])
{
int v=other[p];
if(v==father[x]||vis[v]) continue;
father[v]=x;
dis[v]=dis[x]+len[p];
dfs(v);
}
} int main()
{
scanf("%d%d",&n,&s);
for(int i=;i<n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
} dis[]=; dfs();
l1=;
for(int i=;i<=n;i++) if(dis[i]>dis[l1]) l1=i;
memset(father,,sizeof(father));
dis[l1]=; dfs(l1); l2=;
for(int i=;i<=n;i++) if(dis[i]>dis[l2]) l2=i; //printf("??%d %d\n",l1,l2); int ans=,j=l2;
for(int i=l2;i;i=father[i])
{
while(father[j]&&dis[i]-dis[father[j]]<=s) j=father[j];
ans=min(ans,max(dis[l2]-dis[i],dis[j]));
}
for(int i=l2;i;i=father[i]) vis[i]=;
for(int i=l2;i;i=father[i])
{
dis[i]=;
dfs(i);
}
for(int i=;i<=n;i++) ans=max(ans,dis[i]);
printf("%d",ans);
return ;
}

P1099 树网的核——模拟+树形结构的更多相关文章

  1. 洛谷 P1099 树网的核

    P1099 树网的核 题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W ...

  2. bzoj1999 / P1099 树网的核

    P1099 树网的核 (bzoj数据加强) 前置知识:树的直径 (并不想贴我的智障写法虽然快1倍但内存占用极大甚至在bzoj上MLE) 正常写法之一:用常规方法找到树的直径,在直径上用尺取法找一遍,再 ...

  3. P2491 消防/P1099 树网的核

    P2491 消防/P1099 树网的核 双倍经验,双倍快乐. 题意 在一个树上选择一段总长度不超过\(s\)的链使所有点到该链距离的最大值最小. 输出这个最小的值. 做法 Define:以下\(s\) ...

  4. [NOIP2007] 提高组 洛谷P1099 树网的核

    题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...

  5. P1099 树网的核

    NOIP 2007 提高第四题. 啊......我还是看了题解才做出来的. 这题乍一看毫无头绪,但是我们spy on一下,暗中观察发现:n才300!随便打暴力水过去啊! 然后,这破题怎么暴力?感觉我的 ...

  6. P1099 树网的核 && P2491 [SDOI2011]消防

    给定一棵树, 你可以在树的直径上确定一条长度不超过 \(S\) 的链, 使得树上离此链最长的点距离最小, 输出这个距离 P2491 数据范围为 P1099 的 \(1000\) 倍 Solution ...

  7. #P1099 树网的核 题解

    题目描述 pdf 题解 这一题,刚开始看题目感觉好像很难,题目又长……一看数据范围,呵呵. 已经给出来这是个DAG,所以不用担心连通性的问题.那么怎么做呢? 朴素的做法是把树的直径的两个端点都统计出来 ...

  8. 洛谷P1099 树网的核

    传送门 80分 $ Floyd $ 树的直径可以通过枚举求出.直径的两个端点$ maxi,maxj $ ,由此可知对于一个点 $ k $ ,如果满足 $ d[maxi][k]+d[k][maxj]== ...

  9. 2018.11.06 洛谷P1099 树网的核(最短路+枚举)

    传送门 之前看李煜东的书一直感觉是道神题. 然后发现这题数据范围只有300?300?300? 直接上floydfloydfloyd然后暴力就完了啊. 代码: #include<bits/stdc ...

随机推荐

  1. 使用NPOI进行Excel操作

    一.NPOI组件导入 右键项目菜单,“管理NuGet程序包” 直接搜索“NPOI”即会出现列表,下载第一个进行安装即可 安装完成后项目引用会出现以下几项 二.基础使用 添加引用 using NPOI. ...

  2. Django模板语言的学习

    1.模板系统 1.语法 1.变量相关 {{ name}} ,{{ name|length}}, {{ name |default:"默认值"}} 2.逻辑相关 1.if判断 {% ...

  3. Docker 基础篇 入门篇

    1.Docker入门 1.为什么要用docker? 相比于传统: 部署非常慢 成本非常高 资源浪费 难于迁移和扩展 可能会被限定硬件厂商 由于物理机的诸多问题,后来出现了虚拟机 一个物理机可以部署多个 ...

  4. 区块链会2020再次爆发,先学点DAPP压压惊,跟我一起学《区块链DApp入门实战》

    区块链DApp正在经历市场洗礼,常言道,对抗动荡最稳妥的是稳扎稳打的技术学习,不能临时抱佛脚. 马化腾说:互联网会像水和电一样融入我们的生活.而区块链呢?它是价值互联网的基石,是未来必然的趋势,也会像 ...

  5. springboot feign too many bytes written executing POST

    解決办法: pom添加: <dependency><groupId>io.github.openfeign</groupId><artifactId>f ...

  6. Android为TV端助力之无法依赖constraint-layout:1.1.3(转发)

    原文地址 http://fanjiajia.cn/2018/09/25/Android%20Studio%20Could%20not%20resolve%20com.android.support.c ...

  7. 使用FMXlinux 开发linux 桌面应用

    自从delphi 10.2 开始正式支持linux  开发来,大家一直关心为什么官方没有使用FMX来支持LInux 的桌面开发? 其实原因无非就几点: 1.Linux 大部分是应用还是服务端的,桌面应 ...

  8. Solr基础知识一(安装配置)

    最近接到需求,要修改网站内的搜索规则,就去看了下Solr的资料.现在做完需求了,回来做一些笔记,方便以后查找. 一.安装 1.1 配置JDK JDK下载地址为:https://www.oracle.c ...

  9. H3C 802.11b/g工作频段划分图

  10. 动态渲染左侧菜单栏 :menu tree 动态渲染

    其中后端代码不包含权限控制,同时支持二级(无子菜单) 和 三级菜单(无子菜单). 1.layui前端代码:(其他前端框架实现方法通用,不过需要修改js中append对应标签元素即可) <div ...