树网的核

2007年NOIP全国联赛提高组

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
 
 
题目描述 Description

【问题描述】
设 T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我
们称T 为树网(treenetwork),其中V, E分别表示结点与边的集合,W 表示各边长度的集合,
并设T 有n个结点。
路径:树网中任何两结点a,b 都存在唯一的一条简单路径,用d(a,b)表示以a,b 为端点的
路径的长度,它是该路径上各边长度之和。我们称d(a,b)为a,b 两结点间的距离。
一点v到一条路径P的距离为该点与P 上的最近的结点的距离:
d(v,P)=min{d(v,u),u 为路径P 上的结点}。
树网的直径:树网中最长的路径称为树网的直径。对于给定的树网T,直径不一定是唯一的,
但可以证明:各直径的中点(不一定恰好是某个结点,可能在某条边的内部)是唯一的,我们称该
点为树网的中心。
偏心距 ECC(F):树网T 中距路径F 最远的结点到路径F 的距离,即
ECC(F ) = max{d(v, F ), vÎV}。
任务:对于给定的树网T=(V, E,W)和非负整数s,求一个路径F,它是某直径上的一段路径
(该路径两端均为树网中的结点),其长度不超过s(可以等于s),使偏心距ECC(F)最小。我们
称这个路径为树网T=(V,E,W)的核(Core)。必要时,F 可以退化为某个结点。一般来说,在上
述定义下,核不一定只有一个,但最小偏心距是唯一的。
下面的图给出了树网的一个实例。图中,A-B 与A-C是两条直径,长度均为20。点W是树网
的中心,EF边的长度为5。如果指定s=11,则树网的核为路径DEFG(也可以取为路径DEF),偏
心距为8。如果指定s=0(或s=1、s=2),则树网的核为结点F,偏心距为12。

输入描述 Input Description

第1 行,两个正整数n和s,中间用一个空格隔开。其中n 为树网结点的个数,s为树网的核
的长度的上界。设结点编号依次为1, 2, ..., n。
从第2 行到第n行,每行给出3 个用空格隔开的正整数,依次表示每一条边的两个端点编号和
长度。例如,“2 4 7”表示连接结点2 与4 的边的长度为7。

所给的数据都是正确的,不必检验。

输出描述 Output Description

输出只有一个非负整数,为指定意义下的最小偏心距

样例输入 Sample Input

【输入样例1】
5 2
1 2 5
2 3 2
2 4 4
2 5 3

【输入样例2】
8 6
1 3 2
2 3 2
3 4 6
4 5 3
4 6 4
4 7 2
7 8 3

样例输出 Sample Output

【输出样例1】

5

【输出样例1】

5

数据范围及提示 Data Size & Hint

【限制】
40%的数据满足:5<=n<=15
70%的数据满足:5<=n<=80
100%的数据满足:5<=n<=300, 0<=s<=1000。边长度为不超过1000 的正整数

/*
分三步
一:求出树的直径
二:标记直径上的点
三:计算偏心距
n比较小,floyed可做
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define N 307
#define inf 0x3f3f3f3f using namespace std;
int dis[N][N],point[N];
int n,m,ans,cnt,S,tmp; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} void floyed()
{
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j && j!=k) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
} int main()
{
int x,y,z;
n=read();S=read();
for(int i=;i<=n;i++) for(int j=;j<=n;j++)
if(i!=j) dis[i][j]=inf;
for(int i=;i<n;i++)
{
x=read();y=read();z=read();
dis[x][y]=z;dis[y][x]=z;
} floyed();int mx=,st,end;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(dis[i][j]>mx && dis[i][j]!=inf) mx=dis[i][j],st=i,end=j; for(int i=;i<=n;i++)
if(dis[st][i]+dis[i][end]==dis[st][end]) point[++cnt]=i; ans=inf;
for(int i=;i<=cnt;i++) for(int j=;j<=cnt;j++)
{
if(dis[point[i]][point[j]]<=S)
{
tmp=;
for(int k=;k<=n;k++)
tmp=max(tmp,(dis[k][point[i]]+dis[k][point[j]]-dis[point[i]][point[j]])/);
ans=min(ans,tmp);
}
}
printf("%d\n",ans);
return ;
}

树网的核 2007年NOIP全国联赛提高组(floyed)的更多相关文章

  1. 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)

    矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description [问题描述]帅帅经常跟 ...

  2. 統計數字(2007年NOIP全国联赛提高组)

    题目描述 Description [问题描述]某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000 个,现在需要统计这些自然数各自出现的 ...

  3. 1143 纪念品分组 2007年NOIP全国联赛普及组

    1143 纪念品分组 2007年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解  查看运行结果     题目描述 Descri ...

  4. Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组

    1069 关押罪犯 2010年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description S 城现有两座监狱,一共 ...

  5. Codevs 1218 疫情控制 2012年NOIP全国联赛提高组

    1218 疫情控制 2012年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description H 国有 n 个城市,这 ...

  6. Codevs 3289 花匠 2013年NOIP全国联赛提高组

    3289 花匠 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 花匠栋栋种了一排花,每株花都 ...

  7. Codevs 1173 最优贸易 2009年NOIP全国联赛提高组

    1173 最优贸易 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description [问题描述] C 国有n ...

  8. Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组

    3731 寻找道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找 ...

  9. Codevs 1138 聪明的质监员 2011年NOIP全国联赛提高组

    1138 聪明的质监员 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小 T 是一名质量监督员, ...

随机推荐

  1. js用for...in 这种遍历的方式

    var arr = new Array("first", "second", "third") for(var item in arr) { ...

  2. 计算1+2+...+100之和<for循环的学习>

    #include <stdio.h> /* 计算1+2+....+100 soulsjie 20170525 */ void main(){ int i; int s=0; for(i=0 ...

  3. 添物不花钱学JavaEE(基础篇)-XML

    XML(Extensible Markup Language) XML在日常工作中经常用到,必须有个了解,不过认识一下即可,不要太浪费时间.实际用到 参考图书 <XML入门经典>大而全,不 ...

  4. 找出消耗CPU最高的进程对应的SQL语句

    COLUMN PID FORMAT 999COLUMN S_# FORMAT 999COLUMN USERNAME FORMAT A9 HEADING "ORA USER"COLU ...

  5. noip模拟赛 仓库

    分析:非常像货车运输那道题.先求一下最大生成树.求完之后会发现并不好处理.通常这类求生成树的题目不会就分析kruscal算法的性质.每往最大生成树中加一条边,如果配重大于这条边权,那么这条边所连的两个 ...

  6. boot简介

    目录 1:bootloader介绍2:如何启动一个机器3:工具 Bootloader介绍 MTK的bootloader 主要分为Pre-loader, LK. Pre-loader: 初始化PLL,U ...

  7. MTK平台释疑android M 配置中断相关问题

    1.使用老方法(android L)配置中断,调用request_irq函数时出错,错误代码 -22  Dear Customer: 您好! 如电话沟通,贵司可以在发过来的code基础上做下面的修改再 ...

  8. 【NOIP2017练习】溢出(模拟)

    题意: 思路: a*b<=c <====> b<=c div a var ch,maxs,s:ansistring; v,k,i,maxl,l,len,cnt,cas:long ...

  9. 【BZOJ2527】Meteors(整体二分)

    题意: Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1份相邻),第i份上有第Ai个国家的太空站. 这个星球经常会 ...

  10. Pull方式解析XML文件

    package com.pingyijinren.test; import android.content.Intent; import android.os.Handler; import andr ...