按a從小到大排序,然後按b建圖。
每次只需要找1~n中最大的b加當前的a計算答案即可。
這裡還有乙個小操作就是化邊為點,把一條邊的邊權看做乙個點的點權然後多連兩條邊。
by:大奕哥
1 #include2using
namespace
std;
3const
int n=4e5+10;4
int fa[n],ma[n],pos[n],c[n][2],rev[n],s[n],n,m,ans=2e9,w[n];
5struct
node
10}a[n];
11bool isroot(int x)
12void pushup(int
x)13
19return;20
}21void update(int
x)22
28void rotate(int
x)29
37void splay(int
x)38
50rotate(x);51}
52return;53
}54void access(int
x)5563}
64void mroot(int
x)65
68void link(int x,int
y)69
72void cut(int x,int
y)73
76int
get(int
x)77
80int
main()
8187 sort(a+1,a+1+m);
88for(int i=1;i<=m;++i)
8992
for(int i=1;i<=m;++i)
93100
else
101109
}110
if(get(1)==get
(n))
111117
}118
if(ans!=2e9)
119 printf("
%d\n
",ans);
120else puts("-1"
);121
return0;
122 }
bzoj3669 NOI2014 魔法森林
給定n個點m條邊的無向圖,每條邊有兩個權值a與b。求一條1到n的路徑使得路徑經過邊的最大a與最大b的和最小。無法到達輸出 1。n 50000,m 100000。我們嘗試列舉路徑的最大a值,那麼我們只需按照a排序按順序插入,維護1到n的b最大值即可。用並查集維護連通性。當加入j到k這條邊時如果形成環,...
bzoj 3669 Noi2014 魔法森林
description 為了得到書法大家的真傳,小e同學下定決心去拜訪住在魔法森林中的隱士。魔法森林可以被看成乙個包含個n節點m條邊的無向圖,節點標號為1.n,邊標號為1.m。初始時小e同學在1號節點,隱士則住在號節點n。小e需要通過這一片魔法森林,才能夠拜訪到隱士。魔法森林中居住了一些妖怪。每當有...
bzoj 3669 NOI2014 魔法森林
為了得到書法大家的真傳,小e同學下定決心去拜訪住在魔法森林中的隱士。魔法森林可以被看成乙個包含個n節點m條邊的無向圖,節點標號為1.n,邊標號為1.m。初始時小e同學在號節點1,隱士則住在號節點n。小e需要通過這一片魔法森林,才能夠拜訪到隱士。魔法森林中居住了一些妖怪。每當有人經過一條邊的時候,這條...