NSFZOJ #6003. 论战大原题
给定一个 nnn 个点 mmm 条边的无向图。定义一条路径的长度为路径上最小边的权值。定义 dist(i,j)dist(i,j)dist(i,j) 为起点为 iii,终点为jjj 的长度最长的路径的长度。求出第 kkk 大的 dist(i,j)dist(i,j)dist(i,j),其中(i<j)(i<j)(i<j)。
第一行两个整数 n,m,kn,m,kn,m,k。
接下来 mmm 行每行三个整数 u,v,wu,v,wu,v,w,表示uuu 到 vvv 存在一条长度为 www 的无向边。
一行一个整数 ansansans,为第kkk 大的 dist(i,j)dist(i,j)dist(i,j)。
样例输入 1
4 5 2
1 2 4
4 3 5
2 3 2
4 1 1
3 1 3
样例输出 1
样例 1 说明
dist(1,2)=4 dist(1,3)=3 dist(1,4)=3 dist(2,3)=3 dist(2,4)=3 dist(3,4)=5dist(1,2)=4\ dist(1,3)=3\ dist(1,4)=3\ dist(2,3)=3\ dist(2,4)=3\ dist(3,4)=5dist(1,2)=4 dist(1,3)=3 dist(1,4)=3 dist(2,3)=3 dist(2,4)=3 dist(3,4)=5
故第 222 大的 dist(i,j)dist(i,j)dist(i,j) 为 444
样例输入 2
样例输出 2
对于 20% 20\% 20% 的数据,0<n≤100 0 < n \le 100 0<n≤100
对于 50% 50\% 50% 的数据,0<n≤1000 0 < n \le 1000 0<n≤1000,并满足:
- 其中有 10% 10\% 10% 的数据,m=n−1m=n-1m=n−1;在这中有5% 5\% 5% 的数据,u=v−1u=v-1u=v−1
- 其中有 10% 10\% 10% 的数据随机生成
对于 100% 100\% 100% 的数据,0<n≤105,m≤min(n2,2×105),k≤n(n−1)2 0 < n \le 10^5, m \le \min(n^2,2\times 10^5), k \le \frac{n(n-1)}{2}0<n≤105,m≤min(n2,2×105),k≤2n(n−1),并满足:
- 其中有 10% 10\% 10% 的数据,k=1k=1k=1
- 其中有 20% 20\% 20% 的数据,m=n−1m=n-1m=n−1;在这中有10% 10\% 10% 的数据,u=v−1u=v-1u=v−1
- 其中有 20% 20\% 20% 的数据随机生成
一开始看到题:不就是最大生成树然后DFS一下?
码完一测:诶呀好像不对?
再一想:emmm,好像较小的边会对较大的边计数产生影响?
无奈查了题解:原来Kruskal过程中就可以解决了?!。。
改完就过了。。
主要思想是,最大生成树合并一条边连接的两个子树时,满足“从两个子树中各选一个点,两点间地简单路径长度即为这条边的长度“,同时满足”除此以外所有的点对间简单路径长度都不等于这条边的长度“。这条性质用最大生成树构造过程就能解释:每次选当前最大的边,也就是说已经选过的边都比这条边大。然后就没有然后了。。
代码