BZOJ 1001 最短路求最小割

2021-07-16 20:22:49 字數 962 閱讀 4796

對於這道題,是乙個裸的求一張圖最小割的問題,可是資料太大,dinic過不了,注意到題目中的圖是平面圖,因此我們可以通過將平面圖轉化為對偶圖的形式在對偶圖中跑最短路,這樣就可以用spfa或堆優化的dijkstra來做了

#include#include#include#includeusing namespace std;

#define maxn 2000005

int last[3*maxn],other[3*maxn],pre[3*maxn],len[3*maxn];

int a[1001][1001],b[1001][1001],c[1001][1001];

int l,tot,n,m,dis[maxn],que[2*maxn],vis[maxn];

void connect(int x,int y,int z)

void spfa(int s)

else

vis[v]=1; }}

} }}int main()

if (i==n-1)

if (j==1)

if (j==m-1)

connect(y,x,c[i][j]);

if (!ok1x) connect(x,x-(m-1)*2+1,a[i][j]);

if (!ok2x) connect(x,x+3,b[i][j+1]);

if (!ok2y) connect(y,y+(m-1)*2-1,a[i+1][j]);

if (!ok3y) connect(y,y-3,b[i][j]);

} for (int i=0;i<=t;i++) dis[i]=1e9;

spfa(s);

if (n==1)

for (int i=1;iif (m==1)

for (int i=1;iprintf("%d\n",dis[t]);

return 0;

}

BZOJ1001 最小割,Dinic的優化

time limit 15 sec memory limit 162 mb submit 14389 solved 3462 submit status discuss 現在小朋友們最喜歡的 喜羊羊與灰太狼 話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在你做...

bzoj1001 狼抓兔子 最小割

題意概述 給出一張無向圖,每條邊有乙個權值,割掉這條邊代價為它的權值,求使起點不能到達終點的最小代價。顯然能看出這是個最小割嘛,然後最小割 最大流,建圖的時候特殊處理一下再跑個最大流就好了。include include include include include using namespace...

bzoj2007 海拔 最小割轉最短路

這道題目居然可以轉化為最小割。實際上只要剝去題目中華 keng 麗 die 的外殼,就是乙個裸的最小割。首先,這道題目中的終點一定是最高點。不妨考慮所有比終點高的點,將這些點的海拔都變為1,那麼答案顯然變小,同理起點一定是最低點,因此所有點的海拔範圍為 0,1 其次,需要剝去這道題目最大的乙個外殼,...