【參考】
本題的題解:
還有那篇平面圖網路流的**:
《兩極相通——**最大—最小定理在資訊學競賽中的應用》
兩篇足夠了。
【**】
#pragma comment
#include
#include
#include
#include
using namespace std;
#define mp(i,j) make_pair(i,j)
#define fs first
#define sc second
typedef pair pairint;
const
int s=2000000;
const
int m=6000000;
int n,m;
int sc,sk;
struct graph
mp[m];
int tt,hd[s];
inline
int read(void)
inline
void ins(int u,int v,int d)
inline
intid(int i,int j,int kd)
priority_queueq;
int vis[s],dis[s];
int main(void)
int x;
sc=0,sk=(n-1)*(m-1)<<1|1; //from 0 to vtx
for (int i=1;i<=n;i++)
for (int j=1;j<=m-1;j++)
for (int i=1;i<=n-1;i++)
for (int j=1;j<=m;j++)
for (int i=1;i<=n-1;i++)
for (int j=1;j<=m-1;j++)
pairint now;
memset(vis,0,sizeof vis);
memset(dis,63,sizeof dis);
q.push(mp(0,sc));
for (;!vis[sk];)
printf("%d\n",dis[sk]);
return
0;}
【小結】
主要補充的就是這一部分,總結一下平面圖網路流的一些要點。
①如何想到用最短路的方法解網路流?
很直接的就能想到,平面圖、結構統一利於編號的網路。
②如何編號才能降低出錯率?
一般來說,平面圖網路流的每一塊區域都是矩形的吧。
那就弄個函式id
(i,j
) 表示第
i 行,第
j列的那個區域的編號。
然後注意邊權與區域的關係。
這個應該不要緊,畢竟我們還可以除錯。
③特別注意小資料的特判,特判主要有兩個地方要注意:
- 在跑最短路時把特殊情況處理掉;
- 區域連邊時若只有
1 行,那麼會出現s連到
t 的情況。
BZoj1001狼抓兔子
description 現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣乙個網格的地形 左上角點為 1,1 右下角點為 n,m 上圖中n 4,m 5 有以下三種型別的道路 1 x,y x 1,y 2...
bzoj1001 狼抓兔子
time limit 15 sec memory limit 162 mb submit 12719 solved 3017 submit status discuss description 現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,...
BZOJ 1001, 狼抓兔子
傳送門 求平面圖最小割。資料範圍太大導致直接跑最大流會tle 然而據說只要姿勢不太醜都能水過去 正確做法是平面圖轉對偶圖,就可以把最小割問題轉化成求最短路 orz,太神了 注意要特判n 1與m 1的情況。include const int n 1005,inf 0u 2 int n,m,e,ed,c...