BZOJ3669 NOI2014魔法森林

2022-03-27 07:14:16 字數 1153 閱讀 5920

按a從小到大排序,然後按b建圖。

每次只需要找1~n中最大的b加當前的a計算答案即可。

這裡還有乙個小操作就是化邊為點,把一條邊的邊權看做乙個點的點權然後多連兩條邊。

by:大奕哥

1 #include2

using

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需要通過這一片魔法森林,才能夠拜訪到隱士。魔法森林中居住了一些妖怪。每當有人經過一條邊的時候,這條...