BZOJ3504 CQOI2014危橋(最大流)

2022-05-20 18:15:53 字數 1184 閱讀 7191

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

#include#include

#include

#include

#include

#include

using

namespace

std;

intread()

while (c>='

0'&&c<='

9') x=(x<<1)+(x<<3)+(c^48),c=getchar();

return x*f;

}#define n 55

#define s 0

#define t 51

intn,s1,t1,c1,s2,t2,c2,p[n],tmpp[n],t,tmpt,ans;

intd[n],cur[n],q[n];

struct dataedge[n*n<<2],tmpedge[n*n<<2

];void addedge(int x,int y,int

z)bool

bfs()

}while (headreturn ~d[t];

}int work(int k,int

f)

if (used==0) d[k]=-1

;

return

used;

}void

dinic()

}int

main()

}memcpy(tmpp,p,

sizeof

(p));

memcpy(tmpedge,edge,

sizeof

(edge));

tmpt=t;

addedge(s,s1,c1);

addedge(s,s2,c2);

addedge(t1,t,c1);

addedge(t2,t,c2);

ans=0

; dinic();

if (ans"

no\n";

else

}return0;

}

BZOJ3504 CQOI2014危橋 最大流

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

3504 Cqoi2014 危橋 最大流

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

3504 CQOI2014 危橋 最大流

alice和bob居住在乙個由n座島嶼組成的國家,島嶼被編號為0到n 1。某些島嶼之間有橋相連,橋上的道路是雙 向的,但一次只能供一人通行。其中一些橋由於年久失修成為危橋,最多只能通行兩次。alice希望在島嶼al和a2之間往返an次 從al到a2再從a2到al算一次往返 同時,bob希望在島嶼bl...