wikioi 1167 树网的核 图论
来源:互联网 发布:牧草大数据 编辑:程序博客网 时间:2024/06/06 04:19
本题先用floyd求最短路,顺便将半径长度求出来。
再由此长度确定顶点。然后如果一个点到两端点的距离和等于半径长度,说明这个点再半径上。
然后进num[]再以其到一个端点的距离大小排序。
最后写层循环求解即可。
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int n,e,s,ans=1000000,num[500],head,tail;int path[500][500],d[500][500],maxlen,tot,minl,maxl;bool cmp(int x,int y){return d[head][x]<d[head][y] ;}int main(){ scanf("%d%d",&n,&s); memset(d,63,sizeof(d)); for(int i=1;i<=n;i++) d[i][i]=0; for(int i=1;i<n;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); d[x][y]=z; d[y][x]=z; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(d[i][j]>d[i][k]+d[k][j]) { d[i][j]=d[i][k]+d[k][j]; path[i][j]=path[k][j]; maxlen=max(d[i][j],maxlen); }for(int i = 1 ; i <= n ; i++){int flag=1 ;for(int j=1;j<=n;j++) if(d[i][j]==maxlen) {for(int k = 1 ; k <= n ; k++)if(d[i][k] + d[k][j] == maxlen){num[tot++] = k ;}head = i , tail = j ;sort(num , num + tot , cmp) ;flag = 0 ;break ;}if(!flag) break ;}int maxl,minl,ans=1000000;for(int i=0;i<tot;i++) {for(int j=i;j<tot;j++)if(d[num[i]][num[j]]<=s){maxl=-1 ;for(int k=1;k<=n;k++) {minl=1000000;for(int p=i;p<=j;p++){minl=min(minl,d[k][num[p]]) ;}maxl = max(maxl,minl) ;}ans = min(maxl,ans) ;}}printf("%d",ans); return 0;}
0 0
- wikioi 1167 树网的核 图论
- wikioi p3143 二叉树的序遍历
- wikioi 3143 二叉树的序遍历
- wikioi 数的划分
- wikioi 逃跑的拉尔夫
- wikioi线段树lianxi
- wikioi天梯之3143 二叉树的序遍历
- WikiOI 2370 小机房的树 (最裸LCA)
- [WikiOI] 2.6.4 二叉树的序遍历
- WikiOI 1075 明明的随机数
- Wikioi P1026 逃跑的拉尔夫
- wikioi p1075 明明的随机数
- wikioi p1011 数的计算
- wikioi p1039 数的划分
- wikioi-1039-数的划分
- 【wikioi】1011 数的计算
- 【wikioi】1026 逃跑的拉尔夫
- wikioi 1001 舒适的路线
- poj1019 大数据处理 分块
- 网站资源
- Java访问权限控制小结
- 《算法导论》笔记 第20章 总结与思考
- DICOM-SOP
- wikioi 1167 树网的核 图论
- 谈谈“一站式服务”
- JS,JQuery,之数组三维for循环
- 模块管理常规功能自定义系统的设计与实现(17--模块数据的导出和打印[2])
- 利用 Heritrix 构建特定站点爬虫
- ZOJ 3776 Pokemon Master
- Eclipse console控制台中文乱码问题的解决办法
- hdu 1041
- java使用package生成java包