bzoj
洛谷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
感覺自己網路流一竅不通
這題就是乙個裸的網路流啊。。。
但是我完全不會做
真的覺得網路流白學了。。。
很明顯,危橋只能走\(2\)次,那麼容量為\(2\)
普通的橋隨便走,容量為\(inf\)
直接把兩個點連起來就行了。。。
因為有兩個源點,兩個匯點
建立超級源、匯就行了。
值得注意的是
如果只跑\(a1,b1->a2,b2\)的網路流
會存在一些奇怪的情況,雖然是滿流
但是可能存在你\(a1->a2\)的流跑到了\(b2\)去了
因此,換一組源點(反正邊都是雙向的)
再跑一次,這樣就沒有問題了。。。
#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
#define rg register
#define max 55
#define inf 1000000000
inline int read()
struct linee[max*max*2];
int h[max],cnt=2;
inline void add(int u,int v,int w)
;h[u]=cnt++;
e[cnt]=(line);h[v]=cnt++;
}int level[max],s,t;
bool bfs()
} return level[t];
}int dfs(int u,int flow)
} if(!ret)level[u]=0;
return ret;
}int dinic()
void init()
int n,a1,a2,an,b1,b2,bn;
char g[max][max];
int main()
init();
for(int i=1;i<=n;++i)
for(int j=i+1;j<=n;++j)
if(g[i][j]=='n')add(i,j,inf);
else if(g[i][j]=='o')add(i,j,2);
add(s,a1,an<<1);add(s,b2,bn<<1);
add(a2,t,an<<1);add(b1,t,bn<<1);
if(dinic()!=(an+bn)*2)fl=false;
puts(fl?"yes":"no");
} return 0;
}
BZOJ 3504 危橋(網路流)
題目大意 n n 50 座島,互相之間有或者沒有雙向邊相連,有的邊可以走兩次,有的可以走無限次,問是否可以從a1 a2往返an次 從b1 b2往返bn次。題解 最大流,建圖比較顯然,用流量限制邊走的次數。因為是雙向邊,往返就是走兩次。所以,s向a1 b1連邊,a2 b2向t連邊,邊權為2an 2bn...
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...