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) ,第 ...
随机推荐
- android的引用库类
在eclipse中的项目里,有时需要外来的jar文件.添加后就可以消去程序中的红条条啦~~~~~~~~~可以照下面的说明添加. 方法/步骤 打开eclipse,导入项目 右击 项目 , “Bu ...
- UNIX网络编程中的需要注意的问题
字节流套接字上调用read或write,输入或输出的字节数可能比请求的数量少,这个现象的原因在于内核中用于套接字的缓冲区可能已经达到了极限.此时所需要的是调用者再次调用read或write函数.这个现 ...
- Round-Robin负载均衡算法及其实现原理
毫无疑问,随着互联网.移动网络接入成本的降低,互联网正在日益深入地走入我们的生活,越来越成为人们获取信息的高效平台,ICP行业也顺势呈现出强劲的成长趋势,成为互联网迅猛发展形势下最大的受益者,也直接促 ...
- lufylegend库 LGraphics绘制图片
lufylegend库 LGraphics绘制图片 <!DOCTYPE html> <html lang="en"> <head> <me ...
- C#进阶系列——使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
前言:大过年的,写篇文章不容易,还是给自己点个赞~~年前找了下.net安装包的制作方法,发现Visual Studio自带的制作工具使用起来非常麻烦,需要单独下载安装包,并且什么激活认证等等屁事相当麻 ...
- 你不知道的getComputedStyle
你不知道的getComputedStyle jQuery的css()的底层实现就用到了getComputedStyle这个方法,也许我们用到的很少,但是不得不说这时一个非常强大的函数,下面让我们一探究 ...
- C/C++中的联合体
C/C++中的联合体 利用union可以用相同的存储空间存储不同型别的数据类型,从而节省内存空间.当访问其内成员时可用"."和"->"来直接访问. 当多个 ...
- 计算机程序的思维逻辑 (64) - 常见文件类型处理: 属性文件/CSV/EXCEL/HTML/压缩文件
对于处理文件,我们介绍了流的方式,57节介绍了字节流,58节介绍了字符流,同时,也介绍了比较底层的操作文件的方式,60节介绍了随机读写文件,61节介绍了内存映射文件,我们也介绍了对象的序列化/反序列化 ...
- ArcGIS制图表达Representation实战篇1-边界线和行道树制作
ArcGIS制图表达Representation实战篇1-边界线和行道树制作 by 李远祥 即便是有了一些制图表达的基础,很多人还是对ArcGIS制图表达理解停留在表面,因为没有实际的强化训练是很难体 ...
- std::vector 源代码
vector身为一个动态数组,每次以空间不够的时候会以2倍的倍数增加,而且每次扩充的时候分为3部,分配内存,拷贝数据,释放内存 vector内部有两个成员变量,begin,finish ,endcat ...