既可以是一眼題又可以是有些東西的題
一眼就可以看出來,要用最小割把狼和羊分開,那 \(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 要注...