3504 CQOI2014 危橋 最大流

2022-09-14 16:24:17 字數 2065 閱讀 9218

alice和bob居住在乙個由n座島嶼組成的國家,島嶼被編號為0到n-1。某些島嶼之間有橋相連,橋上的道路是雙

向的,但一次只能供一人通行。其中一些橋由於年久失修成為危橋,最多只能通行兩次。alice希望在島嶼al和a2之間往返an次(從al到a2再從a2到al算一次往返)。同時,bob希望在島嶼bl和b2之間往返bn次。這個過程中,所有危橋最多通行兩次,其餘的橋可以無限次通行。請問alice和bob能完成他們的願望嗎?

本題有多組測試資料。

每組資料第一行包含7個空格隔開的整數,分別為n、al、a2、an、bl、b2、bn。

接下來是乙個n行n列的對稱矩陣,由大寫字母組成。矩陣的i行j列描述編號i一1和j-l的島嶼間的連線情況,若為「o」則表示有危橋相連:為「n」表示有普通的橋相連:為「x」表示沒有橋相連。

|對於每組測試資料輸出一行,如果他們都能完成願望輸出「yes」,否則輸出「no」。

4 0 1 1 2 3 1

xoxx

oxox

xoxo

xxox

4 0 2 1 1 3 2

xnxo

nxox

xoxo

oxox

yesno

資料範圍

4<=n<50

o<=a1, a2, b1, b2<=n-1

1 <=an. b<=50

建圖很容易……很容易想到按原圖保留邊

好橋容量為inf,危橋容量為2。

只不過這樣只有三十分,因為這個題有乙個神奇的坑點……

blog.csdn.net/kiana810/article/details/22622539

兩遍最大流,第一次源點連線alice的起點和bob的起點,第二次源點連線alice的起點和bob的終點

為什麼這樣是正確的呢?

因為假設結果是alice從起點跑到了bob的終點,

那麼交換後兩條路徑要麼沒有源點,要麼沒有匯點,肯定gg

1 #include2 #include3 #include4 #include5 #include6

#define maxm (1000000+10)

7#define maxn (30000+10)

8using

namespace

std;

9struct

node

10 edge[maxm*2

];15

intdepth[maxn];

16int

head[maxn],num_edge;

17int

n,m,s,e,x,y,inf,a[maxn];

18int

a1,a2,an,b1,b2,bn;

19char st[1001][1001

];20 queueq;

2122

void add(int u,int v,int

l)23

2930

bool bfs(int s,int

e)3145}

46return

depth[e];47}

4849

int dfs(int x,int

low)

5063

if (!f) depth[x]=-1;64

return

f;65}66

67int dinic(int s,int

e)68

7475

void

add_edge()

7687 add(s,a1,2*an); add(a1,s,0

);88 add(s,b1,2*bn); add(b1,s,0

);89 add(a2,e,2*an); add(e,a2,0

);90 add(b2,e,2*bn); add(e,b2,0

);91}92

93int

main()

94111

else

112 printf("

no\n");

113}

114 }

3504 Cqoi2014 危橋 最大流

讀完題的感覺就是網路流啦。s連向倆起點,倆終點連向t。然而會有乙個bug。比如a1有x流到了b2,而b1有x流到了a2。這樣最後也是滿流,但其實是不合乎條件的。我們可以把b1,b2調換一下位置再跑一遍,如果還是滿流那麼就合乎題意啦。include include include define inf...

BZOJ3504 CQOI2014危橋 最大流

源向a1和b1連流量為2 an,2 bn的邊,a2和b2向匯連流量為2 an,2 bn的邊,其他邊非危橋連inf,危橋連2的邊,跑最大流,但是這時滿流不一定有解,因為可能有a1流到b2的流這樣,所以把b1,b2反過來重構圖再跑一次最大流,若能滿流則有解。證明 假設第一次a1流了x的流到b2,第二次的...

BZOJ3504 CQOI2014危橋(最大流)

如果只有乙個人的話很容易想到最大流,正常橋連限流inf雙向邊,危橋連限流2雙向邊即可。現在有兩個人,容易想到給兩起點建超源兩匯點建超匯,但這樣沒法保證兩個人各自到達自己要去的目的地。於是再超源連乙個人的起點和另乙個人的終點跑一遍,兩次都滿流說明有解。證明腦 bu 補 hui include incl...