P2598 ZJOI2009 狼和羊的故事

2022-09-20 22:48:17 字數 856 閱讀 7055

既可以是一眼題又可以是有些東西的題

一眼就可以看出來,要用最小割把狼和羊分開,那 \(s\) 向狼連 \(inf\),羊向 \(t\) 連 \(inf\),每個點向周圍連 1,考慮割掉的邊是柵欄

之所以說它有些東西,是應為它可以表示成數學形式,考慮將狼劃分成 0 集合,將羊劃分成 1 集合,沒有歸屬的點隨便

如果兩個點不在同乙個集合,那麼它需要柵欄分開,就是每個點向周圍連 1 的邊,由此可知,0 的歸屬就不需要討論了

#includeusing namespace std;

#define rg register

inline int read()

int head[100010],ver[200010],flow[200010],nxt[200010],tot=1,hh[100010];

int mp[110][110];

int dis[100010],ans;

int dx=,dy=;

int n,m,s,t;

inline void add(int x,int y,int f)

inline int get(int i,int j)

int bfs()

} }return dis[t]?true:false;

}int dfs(int x,int f)

} }if(!used) dis[x]=0;

return used;

}void dinic()

int main()

if(mp[i][j]==2)

}else

} }dinic();

cout

}

ZJOI2009 狼和羊的故事

點此看題 考查網路流的建圖,要把羊和狼分割開來,很容易想到最小割問題,下面講一下建圖的方法 然後我們的圖就建出來了,這時候跑最大流就是答案。include include include include define inf 0x3f3f3f3f const int maxn 10005 using...

ZJOI2009 狼和羊的故事

solution 考慮 1 和 2 相鄰是必須要長度為 1 的籬笆,所以只需考慮 1,2 和 0 之間要不要放籬笆,用 s 連向所有的 1 所有的 2 連向 t 現在問題是要使 s 與 t 不連通,這不是經典的最小割問題嗎?code include include includeusing name...

洛谷P2598 狼和羊的故事

輸入格式 檔案的第一行包含兩個整數n和m。接下來n行每行m個整數,1表示該格仔屬於狼的領地,2表示屬於羊的領地,0表示該格仔不是任何乙隻動物的領地。輸出格式 檔案中僅包含乙個整數ans,代表籬笆的最短長度。解析 一看就是最小割.源點 狼 inf 狼 羊或空 1 空 狼或羊 1 羊 匯點 inf 要注...