bzoj1001 狼抓兔子 網路流(水)
這道題正解不是網路流,但是網路流(最小割)在這種圖上跑得飛起,就能水(2016.8.12)。直接貼程式碼。
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct bian{
int to,cap;
}b[6000005];
int s,t;
int fst[1000005],nxt[6000005],tot=1;
void build(int f,int t,int d)
{
b[++tot].to=t;
b[tot].cap=d;
nxt[tot]=fst[f];
fst[f]=tot;
}
void insert(int f,int t,int d)
{
build(f,t,d);
build(t,f,d);
}
queue<int> q;
int d[1000005];
bool bfs()
{
for(int i=1;i<=t;i++)
d[i]=0;
d[s]=1;q.push(s);
int u,v;
while(!q.empty())
{
u=q.front();
q.pop();
for(int i=fst[u];i;i=nxt[i])
{
v=b[i].to;
if (b[i].cap>0&&!d[v])
{
d[v]=d[u]+1;
q.push(v);
}
}
}
if(d[t])
return true;
return false;
}
int cur[1000005];
int dfs(int u,int a)
{
if(u==t||a==0) return a;
int &i=cur[u],ans=0;
int v;
for(;i;i=nxt[i])
{
v=b[i].to;
if (b[i].cap>0&&d[v]==d[u]+1)
{
int f=dfs(v,min(a,b[i].cap));
ans+=f;a-=f;
b[i].cap-=f;
b[i^1].cap+=f;
}
if(a==0) break;
}
return ans;
}
int inf=1e9;
int maxflow()
{
int ans=0;
while(bfs())
{
for(int i=1;i<=t;i++)
cur[i]=fst[i];
ans+=dfs(s,inf);
}
return ans;
}
void read(int &a)
{
a=0;
char c=getchar();
while(c<'0'||c>'9')
c=getchar();
while(c>='0'&&c<='9')
{
a*=10;
a+=c-'0';
c=getchar();
}
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
s=1;t=n*m;
int w,x;
for(int i=1;i<=n;i++)
for(int j=1;j<m;j++)
{
read(w);x=(i-1)*m+j;
insert(x,x+1,w);
}
int tot=0;
for(int i=1;i<n;i++)
for(int j=1;j<=m;j++)
{
read(w);tot++;
insert(tot,tot+m,w);
}
for(int i=1;i<n;i++)
for(int j=1;j<m;j++)
{
read(w);x=(i-1)*m+j;
insert(x,x+m+1,w);
}
printf("%d",maxflow());
}
相關推薦
bzoj1001 狼抓兔子 網路流(水)
這道題正解不是網路流,但是網路流(最小割)在這種圖上跑得飛起,就能水(2016.8.12)。直接貼程式碼。 #include<iostream> #include<cstdio> #include<queue> usin
bzoj1001狼抓兔子——網路流平面圖問題
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 25715 Solved: 6529 [Submit][Status][Discuss] Description 現在小朋
BZOJ1001狼抓兔子(網路流最小割)
BZOJ1001 狼抓兔子 題目描述 現在小朋友們最喜歡的”喜羊羊與灰太狼”,話說灰太狼抓羊不到,但抓兔子還是比較在行的, 而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣一個網格的地形: 左上角點為(1,1),右下角點為(N,M
BZOJ1001:狼抓兔子(最小割最大流+vector模板)
cout 地形 ++ 能夠 can 圖片 jpg http img 1001: [BeiJing2006]狼抓兔子 Description 現在小朋友們最喜歡的"喜羊羊與灰太狼",話說灰太狼抓羊不到,但抓兔子還是比較在行的,而且現在的兔子還比較笨,它們只有兩個窩,現在
[日常摸魚]bzoj1001狼抓兔子-最大流最小割
百萬 reg ret 最短 fin 網絡圖 通過 聯通 gpo 題意就是求最小割… 然後我們有這麽一個定理(最大流-最小割定理 ): 任何一個網絡圖的最小割中邊的容量之和等於圖的最大流。 (下面直接簡稱為最大流和最小割) 證明: 如果最大流>最小割,那把這些割邊刪去之
bzoj1001狼抓兔子
n) std 灰太狼 top bool 表示 continue 能夠 long 1001: [BeiJing2006]狼抓兔子 現在小朋友們最喜歡的"喜羊羊與灰太狼",話說灰太狼抓羊不到,但抓兔子還是比較在行的, 而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對
狼抓兔子 HYSBZ - 1001 (平面圖轉對偶圖最短路求最小割)
狼抓兔子 HYSBZ - 1001 現在小朋友們最喜歡的"喜羊羊與灰太狼",話說灰太狼抓羊不到,但抓兔子還是比較在行的, 而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣一個網格的地形: 左上角點為(1,1),右下角點為(
【dinic模板】BZOJ1001 狼抓兔子
#include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace st
BZOJ1001 狼抓兔子
最小割 程式碼 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) # def
BZOJ1001狼抓兔子(平面圖最小割)
題目大意:給一個n*m的網格圖,表示一個地圖。起點(1,1),終點(n,m)。每條邊上有一個權值,表示該路徑上的兔流量。現在一些兔子從起點沿著邊跑到終點。然後有一些大灰狼要抓這些兔子。一隻狼能抓一隻兔子。現在狼王想知道至少要派多少狼能堵住兔子的路。 題目分析:很裸的最小割
網路流(知識點) 一 終究還是躲不掉
網路 G=(V,E) 是一張有向圖 我們計算的最大流是指 一個點S(源點) 流向 一個點T(匯點) 的最大流量 c(x,y) 表示x到y這條邊的容量 f(x,y) 表示x流向y的量 可以為負 即
網路流(1)-------最大流
一.網路流最大流問題和基本概念 1.網路流基本概念 (1)名詞解釋 源點:流量的源頭,只有流出去的點 匯點:流量的匯聚點,只有流進來的點 流量:一條邊上流過的實際流量 容量:一條邊上可供流過的最大流量 殘量:一條邊上的容量-當前流量,剩下可流的最大流 (2)網路流概念
網路流(2)-----最小費用最大流
一. 二. 1.EK演算法 + SPFA 最短路 (1)程式碼: #include <iostream> #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f c
網路流 (一) 最大流的原理圖解
嗯…於是學一波網路流罷 之前學過一波,不過失敗了orz 希望這次能學成功(x) 建模 想象一下,你在排程貨車運輸(不是最小生成樹+LCA那道題放心吧),但是有些橋是有載重限制的。比如下圖: 綠色的邊表示橋,上面的數字表示載重。 老闆打算從
基於Java的網路爬蟲實現抓取網路小說(一)
package novel.spider.impl; import java.util.ArrayList; import java.util.List; import org.apache.http.client.methods.CloseableHttpResponse; import org.apa
BZOJ1001 [BeiJing2006]狼抓兔子(網路流最小割)
題目可以轉化為:從原圖中選出一個邊集,使得去掉它之後,(1,1)與(n,m)不通 即:以(1,1)為源,(n,m)為匯,求該圖最小割 不過由於節點過多,直接對輸入的圖求最小割的話會超時 轉化:求
bzoj1001 [BeiJing2006]狼抓兔子(網路流dinic演算法||最短路spfa)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 24017 Solved: 6
BZOJ1001[BeiJing2006]狼抓兔子最小割網路流
Description 現在小朋友們最喜歡的”喜羊羊與灰太狼”,話說灰太狼抓羊不到,但抓兔子還是比較在行的, 而且現在的兔子還比較笨,它們只有兩個窩,現在你做為狼王,面對下面這樣一個網格的地形: 左上角點為(1,1),右下角點為(N,M)(上圖中N=
bzoj1001: [BeiJing2006]狼抓兔子(最大流)
題目傳送門 解法: 每一隻兔子就需要一隻狼。 那麼我們只需要求出最多能通過多少隻兔子即可。 然後就派多少隻狼就行了唄。。 因為兔子從哪裡過來的我就在哪裡放狼。 所以狼的數量一定等於最多兔子通過的數量 題目並不要求求方案,所以不需知道兔子從哪過來。
[BZOJ1001][BeiJing2006]狼抓兔子 && 平面網路流
傳說這個題可以轉最短路 於是我去轉最短路 於是搞的我無比糾結 連邊麻煩的要死 #include<cstdio> #include<algorithm> #include<cstring> #include<iostream>