BZOJ 3669 Noi2014 魔法森林

2022-04-30 10:27:08 字數 2306 閱讀 9426

time limit: 30 sec  memory limit: 512 mb

submit: 2431  solved: 1516

[submit][status][discuss]

為了得到書法大家的真傳,小e同學下定決心去拜訪住在魔法森林中的隱士。魔法森林可以被看成乙個包含個n節點m條邊的無向圖,節點標號為1..n,邊標號為1..m。初始時小e同學在號節點1,隱士則住在號節點n。小e需要通過這一片魔法森林,才能夠拜訪到隱士。

魔法森林中居住了一些妖怪。每當有人經過一條邊的時候,這條邊上的妖怪就會對其發起攻擊。幸運的是,在號節點住著兩種守護精靈:a型守護精靈與b型守護精靈。小e可以借助它們的力量,達到自己的目的。

只要小e帶上足夠多的守護精靈,妖怪們就不會發起攻擊了。具體來說,無向圖中的每一條邊ei包含兩個權值ai與bi。若身上攜帶的a型守護精靈個數不少於ai,且b型守護精靈個數不少於bi,這條邊上的妖怪就不會對通過這條邊的人發起攻擊。當且僅當通過這片魔法森林的過程中沒有任意一條邊的妖怪向小e發起攻擊,他才能成功找到隱士。

由於攜帶守護精靈是一件非常麻煩的事,小e想要知道,要能夠成功拜訪到隱士,最少需要攜帶守護精靈的總個數。守護精靈的總個數為a型守護精靈的個數與b型守護精靈的個數之和。

第1行包含兩個整數n,m,表示無向圖共有n個節點,m條邊。 接下來m行,第行包含4個正整數xi,yi,ai,bi,描述第i條無向邊。其中xi與yi為該邊兩個端點的標號,ai與bi的含義如題所述。 注意資料中可能包含重邊與自環。

輸出一行乙個整數:如果小e可以成功拜訪到隱士,輸出小e最少需要攜帶的守護精靈的總個數;如果無論如何小e都無法拜訪到隱士,輸出「-1」(不含引號)。

【輸入樣例1】

4 51 2 19 1

2 3 8 12

2 4 12 15

1 3 17 8

3 4 1 17

【輸入樣例2】

3 11 2 1 1

【輸出樣例1】

32【樣例說明1】

如果小e走路徑1→2→4,需要攜帶19+15=34個守護精靈;

如果小e走路徑1→3→4,需要攜帶17+17=34個守護精靈;

如果小e走路徑1→2→3→4,需要攜帶19+17=36個守護精靈;

如果小e走路徑1→3→2→4,需要攜帶17+15=32個守護精靈。

綜上所述,小e最少需要攜帶32個守護精靈。

【輸出樣例2】

-1【樣例說明2】

小e無法從1號節點到達3號節點,故輸出-1。

2<=n<=50,000

0<=m<=100,000

1<=ai ,bi<=50,000

[submit][status][discuss]

一道lct經典題。

先把所有邊按照a從小到大排序,然後逐個加入,按b動態維護最小生成樹即可。

1 #include2

using

namespace

std;

3#define mxn 300005

4int n, m, ans = 0x3f3f3f3f;5

struct edge e[mxn];

6bool cmp(const edge &a, const edge &b)

9int sn[mxn][2

], fa[mxn], rv[mxn], vl[mxn], id[mxn], stk[mxn], tot;

10void update(int

t) 15

bool isroot(int

t) 21

void push(int

t) 27

void link(int t, int f, int

k) 31

void rotate(int

t) 41

void pushdown(int

t) 46

void splay(int

t) 56}57

}58void access(int

t) 63

void makeroot(int

t) 66

void link(int t, int

f) 69

void cut(int a, int

b) 73

int find(int

t) 79

int query(int a, int

b) 83 signed main(void

) 96 printf("

%d\n

", ans < 0x3f3f3f3f ? ans : -1

);97 }

@author: yousiki

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