日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3732: Network

發布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

6 6 8
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
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

?

題解:簡直逗比到家啊——昨天我的程序先是TLE,但是一想這個復雜度應該不會啊,感覺不對頭,于是發現了數組開小了(phile:數組開小怎么會TLE? HansBug:我哪知道= =)然后再交就WA,不停的WA,我硬是找了一個晚上的錯,結果啥都沒弄出來,還是那樣,棄療了,向lydsy2012要了下數據。。。今天數據到手,手工一測試,怎么測都沒錯?!?!然后再Submit一次一個字都沒動的程序,Accept(HansBug:這。。。)。。。好了說思路——這題可以算是NOIP2013貨車運輸的修改+略微強化版,先是求出最小生成樹(額。。我一般用并查集+kruskal),然后DFS建樹,然后用倍增進行O(nlogn)的初始化,然后每次一個O(logn)地求LCA(至于路徑上的最大值嘛,只要再加一個數組就行啦),就這樣O(nlogn)地AC之。。。(HansBug:不過這個逗比的Judge還是害得我糾結了一晚上啊TT phile:不是和你說了嘛變量不清零有時候會跪掉。。。 HansBug:GET IT。。。) 1 type 2 point=^node; 3 node=record 4 w,g:longint; 5 next:point; 6 end; 7 8 var 9 i,j,k,l,m,n,t:longint; 10 a:array[0..40000] of point; 11 b:array[0..40000,1..3] of longint; 12 c,f,g,h:array[0..40000] of longint; 13 d:array[0..20,0..40000] of longint; 14 e:array[0..20,0..40000] of longint; 15 function getfat(x:longint):longint;inline; 16 begin 17 while x<>c[x] do x:=c[x]; 18 getfat:=x; 19 end; 20 function tog(x,y:longint):boolean;inline; 21 begin 22 exit(getfat(x)=getfat(y)); 23 end; 24 procedure merge(x,y:longint);inline; 25 begin 26 c[getfat(x)]:=getfat(y); 27 end; 28 29 procedure add(x,y,z:longint);inline; 30 var p:point; 31 begin 32 new(p); 33 p^.g:=y; 34 p^.w:=z; 35 p^.next:=a[x]; 36 a[x]:=p; 37 end; 38 procedure swap(var x,y:longint);inline; 39 var z:longint; 40 begin 41 z:=x;x:=y;y:=z; 42 end; 43 procedure sort(l,r:longint);inline; 44 var i,j,x,y:longint; 45 begin 46 i:=l;j:=r;x:=b[(l+r) div 2,3]; 47 repeat 48 while b[i,3]<x do inc(i); 49 while b[j,3]>x do dec(j); 50 if i<=j then 51 begin 52 swap(b[i,1],b[j,1]); 53 swap(b[i,2],b[j,2]); 54 swap(b[i,3],b[j,3]); 55 inc(i);dec(j); 56 end; 57 until i>j; 58 if l<j then sort(l,j); 59 if i<r then sort(i,r); 60 end; 61 procedure dfs(x:longint);inline; 62 var p:point; 63 begin 64 p:=a[x]; 65 while p<>nil do 66 begin 67 if d[0,p^.g]=0 then 68 begin 69 d[0,p^.g]:=x; 70 e[0,p^.g]:=p^.w; 71 c[p^.g]:=c[x]+1; 72 dfs(p^.g); 73 end; 74 p:=p^.next; 75 end; 76 end; 77 function max(x,y:longint):longint;inline; 78 begin 79 if x>y then max:=x else max:=y; 80 end; 81 function fatget(x,y:longint):longint;//inline; 82 var i:longint; 83 begin 84 i:=0; 85 while y>0 do 86 begin 87 if odd(y) then x:=d[i,x]; 88 inc(i); 89 y:=y div 2; 90 end; 91 exit(x); 92 end; 93 function getmax(x,y:longint):longint;//inline; 94 var i,j:longint; 95 begin 96 i:=0;j:=0; 97 while y>0 do 98 begin 99 if odd(y) then 100 begin 101 j:=max(j,e[i,x]); 102 x:=d[i,x]; 103 end; 104 inc(i); 105 y:=y div 2; 106 end; 107 exit(j); 108 end; 109 function getcom(x,y:longint):longint;//inline; 110 var i,j,k,l:longint; 111 begin 112 if x=y then exit(x); 113 if c[x]<c[y] then swap(x,y); 114 x:=fatget(x,c[x]-c[y]); 115 if x=y then exit(x); 116 i:=20; 117 while i>=0 do 118 begin 119 if d[i,x]<>d[i,y] then 120 begin 121 x:=d[i,x]; 122 y:=d[i,y]; 123 end; 124 dec(i); 125 end; 126 exit(d[0,x]); 127 end; 128 function getpath(x,y:longint):longint;//inline; 129 var i,j,k,l:longint; 130 begin 131 l:=getcom(x,y); 132 getpath:=max(getmax(x,c[x]-c[l]),getmax(y,c[y]-c[l])); 133 end; 134 135 begin 136 readln(n,m,t); 137 for i:=1 to n do a[i]:=nil; 138 for i:=1 to n do c[i]:=i; 139 for i:=1 to m do 140 readln(b[i,1],b[i,2],b[i,3]); 141 sort(1,m); 142 j:=1; 143 for i:=1 to n-1 do 144 begin 145 while tog(b[j,1],b[j,2]) do inc(j); 146 add(b[j,1],b[j,2],b[j,3]); 147 add(b[j,2],b[j,1],b[j,3]); 148 merge(b[j,1],b[j,2]); 149 end; 150 fillchar(d,sizeof(d),0); 151 fillchar(c,sizeof(c),0); 152 d[0,1]:=-1; 153 dfs(1); 154 d[0,1]:=0; 155 for i:=1 to 20 do 156 begin 157 for j:=1 to n do 158 begin 159 d[i,j]:=d[i-1,d[i-1,j]]; 160 e[i,j]:=max(e[i-1,d[i-1,j]],e[i-1,j]); 161 end; 162 end; 163 for i:=1 to t do 164 begin 165 readln(j,k); 166 writeln(getpath(j,k)); 167 end; 168 end. 169

?

轉載于:https://www.cnblogs.com/HansBug/p/4172766.html

總結

以上是生活随笔為你收集整理的3732: Network的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。