code1167 树网的核
floyd+枚举
看点:
1.floyd同时用数组p记录转移节点k,这样知道线段的端点u v就可以得到整条线段
2.任意一点c到线段a b的距离=(d[a][c]+d[c][b]-d[a][b])/2
3.枚举直径st en的所有子线段a b:
for(int a=en;a;a=p[st][a])
for(int b=a;b;b=p[st][b])
代码:
#include<iostream> #include<cstring> #define Size 305 using namespace std;int n,s; int num=0; int ans=0x3f3f3f3f; int d[Size][Size]; int p[Size][Size]; struct path{int u,v; }g[Size*Size]; int cnt=0;int main(){memset(d,0x3f,sizeof(d));cin>>n>>s;for(int i=1;i<=n;i++)d[i][i]=0;int a,b,w;for(int i=1;i<n;i++){cin>>a>>b>>w;d[a][b]=d[b][a]=w;p[a][b]=a; p[b][a]=b;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){if(k==i)continue;for(int j=1;j<=n;j++){if(k==j||i==j)continue;if(d[i][k]+d[k][j]<d[i][j]){d[i][j]=d[i][k]+d[k][j];p[i][j]=k;num=max(num,d[i][j]);}}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(d[i][j]==num){g[++cnt].u=i; g[cnt].v=j;}}}for(int i=1;i<=cnt;i++){int st=g[i].u; int en=g[i].v;//cout<<st<<' '<<en<<endl;for(int a=en;a;a=p[st][a]){for(int b=a;b;b=p[st][b]){if(d[a][b]>s)break;//cout<<" "<<a<<' '<<b<<" "<<endl;int dis=0;for(int c=1;c<=n;c++){dis=max(dis,(d[a][c]+d[c][b]-d[a][b])/2);}ans=min(ans,dis);}}}cout<<ans<<endl; }
转载于:https://www.cnblogs.com/FuTaimeng/p/5647442.html
code1167 树网的核相关推荐
- [O(N)的我不会]树网的核
[题目描述] 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中V, E分别表示结点与边的集合,W表示各边长度的集 ...
- [NOIP2007] 提高组 洛谷P1099 树网的核
题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...
- 树网的核(codevs 1167)
题目描述 Description [问题描述] 设 T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我 们称T 为树网(treenetwork),其中V, E分 ...
- NOIP2007 树网的核 [BZOJ2282][Sdoi2011]消防
NOIP2007 树网的核 树的直径的最长性是一个很有用的概念,可能对一些题都帮助. 树的直径 给定一棵树,树中每条边都有一个权值,树中两点之间的距离定义为连接两点的路径边权之和.树中最远的两个节点之 ...
- 树网的核 Vijos1362 NOIP2007 树结构 直径 暴搜
题面在最下方. 树结构的题做多了就会发现,本题所谓的树网的核(一段偏心距ECC最小的路径)一定是在树的直径上的. 我刚开始做的时候没想到这个,然后写了三个dfs讨论每条直径 Orz 其实只要认识到了这 ...
- VIJOS 1362 树网的核
描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并设T ...
- 2017.3.21 树网的核 思考记录
把这个noip的题搞出来了.. 不是很难,而且我的要求也比较高(虽然以前看到这种题都是直接看题解,因为太复杂不会) 虽然搞出来在luogu 的noip数据 A了,但bzoj还是T了.理论上应该是O(n ...
- 洛谷P1099 树网的核
传送门 80分 $ Floyd $ 树的直径可以通过枚举求出.直径的两个端点$ maxi,maxj $ ,由此可知对于一个点 $ k $ ,如果满足 $ d[maxi][k]+d[k][maxj]== ...
- bzoj 1999: [Noip2007]Core树网的核【树的直径+单调队列】
我要懒死了,所以依然是lyd的课件截图 注意是min{max(max(d[uk]),dis(u1,ui),dis(uj,un))},每次都从这三个的max里取min #include<iostr ...
最新文章
- palapaweb怎样开启服务_过年期间如何做到系统服务安全运行?
- python中读取文件内容-深入学习python解析并读取PDF文件内容的方法
- Algs4-2.1.37部分有序
- linux如何使用vim显示行号语法高亮,(.vimrc简单使用)
- MySQL【问题记录 01】报错 1709 - Index column size too large. The maximum column size is 767 bytes. 可能是最简单的方法
- 【Linux】一步一步学Linux——group文件详解(108)
- 数据结构与算法之BFPRT算法
- 世界最小晶体管问世 栅极长度仅一纳米
- mysql支持事务的存储引擎_MySQL基础(三)【MySQL事务与存储引擎】
- 使用idea本地运行mapreduce程序,控制台log4j日志没有打印出来,可以这样解决
- MariaDB安装、卸载以及相关设置(Linux服务器Mysql部署)
- 前端开发学习路线图,完整学习教程+工具+框架
- security工作笔记006---oauth2(spring security)报错method_not_allowed(Request method 'GET' not supported)解决
- linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器
- sw如何缩放装配体_solidworks提高大型装配体的展示、设计效率
- steam怎么共享计算机游戏,steam怎么共享游戏给好友?steam向好友共享游戏教程
- 【手游】手游行业专业相关知识储备
- cscope.exe程序的base64文本
- 最常用到的35种心理效应集锦
- PHP编写modbus,php – CRC-CCITT转CRC16 Modbus实现