BZOJ5120無限之環 費用流

2021-08-14 09:15:40 字數 1215 閱讀 7223

傳送門

題意:看原題吧,想不出比原題更好的描述了- -

solution:

一開始思考過用網路流,但是想不出如何建圖,最後還是去看了題解qwq,建圖思路很妙啊,我們先把每個點拆成四個小點,分別對應上,下,左,右,然後對應每種水管在點內分別建圖(細節大家可以結合**思考一下),由於這是乙個二分圖(拆點之前),所以說我們對每個點進行黑白染色,這樣便可以確定每個點是連向t還是從s連過來,點與點之間都要建流量為1,費用為0的邊,最後跑費用流即可,注意這裡我們的流量表示的是「最大能匹配到的水管數量」,同時注意我們連邊的順序。

**:

#include

#include

using namespace std;

const int nm=2010;

const int n=8010;

struct edge[20

*n];

int tot=0;

int head[n];

int n,m,size=1,s,t;

int id[nm][nm][4];

int kx[4]=;

int ky[4]=;

int pre[n],prv[n];

bool vis[n];

int dis[n];

intq[n*n];

void adde(int i,int j,int v,int f)

void add(int i,int j,int v,int f,int b)

void work(int i,int j,int type,int

pos,int b)

else

if (type==2)

else

if (type==3)

else

if (type==4)

else

}bool spfa()}}

}return (dis[t]!=1e9);

}int main()

for (int i=1,j,_x,_y;i<=n;i++)

for (j=1;j<=m;j++)

if ((i+j)&1)

for (int k=0;k<4;k++)

int ansv=0,ansf=0;

while (spfa())

printf("%d",(ansf==sum/2)?ansv:-1);

}

清華集訓 2017 無限之環(費用流)

清華集訓 2017 無限之環 費用流神題。對於每乙個方格延伸出去的每一根水管,有且僅有乙個其他方格延伸出的水管與之相連,這樣就不會漏水。即 每根水管的容量為 1 1 且必須滿流。然而即使產生了最優情況,整個管網也不一定是一整個聯通塊,而可能被分成若干塊。因此,我們要對每個格點染色,相鄰的兩個格點,乙...

洛谷P4003 無限之環 費用流

曾經有一款流行的遊戲,叫做 infinity loop,先來簡單的介紹一下這個遊戲 遊戲在乙個n m n m的網格狀棋盤上進行,其中有些小方格中會有水管,水管可能在 格某些方向的邊界的中點有介面,所有水管的粗細都相同,所以如果兩個相鄰方格的 共邊界的中點都有接頭,那麼可以看作這兩個接頭互相連線。水管...

清華集訓 2017 無限之環

無限之wa 本題如果知道是網路流的話,其實建圖不算特別神奇,但是比較麻煩。資料範圍過大,插頭dp不能處理,而且是乙個網格圖,考慮網路流。先看是不是二分圖?每個格仔只會和相鄰四個格仔發生關係 所以,黑白染色正好。i j為偶數左部點,i j為奇數右部點 不漏水是什麼?每個管道的四個口都能和別的接好。s向...