3732: Network
3732: Network
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 395 Solved: 179
[Submit][Status]
Description
给你N个点的无向图 (1 <= N <= 15,000),记为:1…N。
图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 < = d_j < = 1,000,000,000).
现在有 K个询问 (1 < = K < = 15,000)。
每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?
Input
第一行: N, M, K。
第2..M+1行: 三个正整数:X, Y, and D (1 <= X <=N; 1 <= Y <= N). 表示X与Y之间有一条长度为D的边。
第M+2..M+K+1行: 每行两个整数A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少?
Output
对每个询问,输出最长的边最小值是多少。
Sample Input
1 2 5
2 3 4
3 4 3
1 4 8
2 5 7
4 6 2
1 2
1 3
1 4
2 3
2 4
5 1
6 2
6 1
Sample Output
5
5
4
4
7
4
5
HINT
1 <= N <= 15,000
1 <= M <= 30,000
1 <= d_j <= 1,000,000,000
1 <= K <= 15,000
Source
type
point=^node;
node=record
w,g:longint;
next:point;
end; var
i,j,k,l,m,n,t:longint;
a:array[..] of point;
b:array[..,..] of longint;
c,f,g,h:array[..] of longint;
d:array[..,..] of longint;
e:array[..,..] of longint;
function getfat(x:longint):longint;inline;
begin
while x<>c[x] do x:=c[x];
getfat:=x;
end;
function tog(x,y:longint):boolean;inline;
begin
exit(getfat(x)=getfat(y));
end;
procedure merge(x,y:longint);inline;
begin
c[getfat(x)]:=getfat(y);
end; procedure add(x,y,z:longint);inline;
var p:point;
begin
new(p);
p^.g:=y;
p^.w:=z;
p^.next:=a[x];
a[x]:=p;
end;
procedure swap(var x,y:longint);inline;
var z:longint;
begin
z:=x;x:=y;y:=z;
end;
procedure sort(l,r:longint);inline;
var i,j,x,y:longint;
begin
i:=l;j:=r;x:=b[(l+r) div ,];
repeat
while b[i,]<x do inc(i);
while b[j,]>x do dec(j);
if i<=j then
begin
swap(b[i,],b[j,]);
swap(b[i,],b[j,]);
swap(b[i,],b[j,]);
inc(i);dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
procedure dfs(x:longint);inline;
var p:point;
begin
p:=a[x];
while p<>nil do
begin
if d[,p^.g]= then
begin
d[,p^.g]:=x;
e[,p^.g]:=p^.w;
c[p^.g]:=c[x]+;
dfs(p^.g);
end;
p:=p^.next;
end;
end;
function max(x,y:longint):longint;inline;
begin
if x>y then max:=x else max:=y;
end;
function fatget(x,y:longint):longint;//inline;
var i:longint;
begin
i:=;
while y> do
begin
if odd(y) then x:=d[i,x];
inc(i);
y:=y div ;
end;
exit(x);
end;
function getmax(x,y:longint):longint;//inline;
var i,j:longint;
begin
i:=;j:=;
while y> do
begin
if odd(y) then
begin
j:=max(j,e[i,x]);
x:=d[i,x];
end;
inc(i);
y:=y div ;
end;
exit(j);
end;
function getcom(x,y:longint):longint;//inline;
var i,j,k,l:longint;
begin
if x=y then exit(x);
if c[x]<c[y] then swap(x,y);
x:=fatget(x,c[x]-c[y]);
if x=y then exit(x);
i:=;
while i>= do
begin
if d[i,x]<>d[i,y] then
begin
x:=d[i,x];
y:=d[i,y];
end;
dec(i);
end;
exit(d[,x]);
end;
function getpath(x,y:longint):longint;//inline;
var i,j,k,l:longint;
begin
l:=getcom(x,y);
getpath:=max(getmax(x,c[x]-c[l]),getmax(y,c[y]-c[l]));
end; begin
readln(n,m,t);
for i:= to n do a[i]:=nil;
for i:= to n do c[i]:=i;
for i:= to m do
readln(b[i,],b[i,],b[i,]);
sort(,m);
j:=;
for i:= to n- do
begin
while tog(b[j,],b[j,]) do inc(j);
add(b[j,],b[j,],b[j,]);
add(b[j,],b[j,],b[j,]);
merge(b[j,],b[j,]);
end;
fillchar(d,sizeof(d),);
fillchar(c,sizeof(c),);
d[,]:=-;
dfs();
d[,]:=;
for i:= to do
begin
for j:= to n do
begin
d[i,j]:=d[i-,d[i-,j]];
e[i,j]:=max(e[i-,d[i-,j]],e[i-,j]);
end;
end;
for i:= to t do
begin
readln(j,k);
writeln(getpath(j,k));
end;
end.
3732: Network的更多相关文章
- BZOJ 3732: Network 最小生成树 倍增
3732: Network 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 &l ...
- 【BZOJ】3732: Network【Kruskal重构树】
3732: Network Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2812 Solved: 1363[Submit][Status][Dis ...
- BZOJ 3732 Network
2016.1.28 纪念我BZOJ第一题 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= ...
- bzoj 3732 Network(最短路+倍增 | LCT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3732 [题意] 给定一个无向图,处理若干询问:uv路径上最长的边最小是多少? [思路一 ...
- bzoj 3732: Network 树上两点边权最值
http://www.lydsy.com/JudgeOnline/problem.php?id=3732 首先想到,要使得最长边最短,应该尽量走最短的边,在MST上. 然后像LCA那样倍增娶个最大值 ...
- BZOJ 3732 Network —— 最小生成树 + 倍增LCA
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 <= N <= 15, ...
- BZOJ——T 3732: Network
http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: ...
- Kruskal重构树+LCA || BZOJ 3732: Network
题面:https://www.lydsy.com/JudgeOnline/problem.php?id=3732 题解:Kruskal重构树板子 代码: #include<cstdio> ...
- [bzoj 3732] Network (Kruskal重构树)
kruskal重构树 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第 ...
随机推荐
- Kingbase在初始化时遇到的错误
FATAL: could not create semaphores: No space left on deviceDETAIL: Failed system call was semget(58 ...
- leetcode难度及面试频率
转载自:LeetCode Question Difficulty Distribution 1 Two Sum 2 5 array sort set ...
- 程序启动缓慢-原来是hbm.xml doctype的原因
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "h ...
- 递归编译的Makefile的实现
最近写了一个递归Makefile,目的是既可以实现子模块的单独编译,也可以不做任何修改就和整个程序的整体进行无缝衔接的编译.具体的思路是借助第三方文件,将子模块编译好的.o文件的路径自动写到confi ...
- getstyle() 获取样式
问题:在js动画中,如果元素设置了border,padding等,获取到的样式是盒子的样式,这样会影响动画的正常显示. 解决方案一:在元素的行内添加样式 如 <div style=" ...
- 匹配PC和移动端
方法1: var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVersion; ret ...
- php测试题 知识点整理
1 SQL语句的整理: insert into+表名+values +(添加的内容 ) 例: insert into users values ('p001','张三','男'); 修改: upd ...
- Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core --- ...
- Java 程序测试_循环语句中的break和continue
package test; public class Loop_Statement { public static void main(String [] args) { String[] newba ...
- CSS3的属性为什么要带前缀
使用过CSS3属性的同学都知道,CSS3属性都需要带各浏览器的前缀,甚至到现在,依然还有很多属性需要带前缀.这是为什么呢? 我的理解是,浏览器厂商以前就一直在实施CSS3,但它还未成为真正的标准.为此 ...