1. 程式人生 > >bzoj1001 狼抓兔子 網路流(水)

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>