zoukankan      html  css  js  c++  java
  • BZOJ-1001: [BeiJing2006]狼抓兔子 (网络流最小割)

    1001: [BeiJing2006]狼抓兔子

    Time Limit: 15 Sec  Memory Limit: 162 MB
    Submit: 24888  Solved: 6318
    [Submit][Status][Discuss]

    Description

    现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,
    而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:

     

    左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 
    1:(x,y)<==>(x+1,y) 
    2:(x,y)<==>(x,y+1) 
    3:(x,y)<==>(x+1,y+1) 
    道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,
    开始时所有的兔子都聚集在左上角(1,1)的窝里,现在它们要跑到右下解(N,M)的窝中去,狼王开始伏击
    这些兔子.当然为了保险起见,如果一条道路上最多通过的兔子数为K,狼王需要安排同样数量的K只狼,
    才能完全封锁这条道路,你需要帮助狼王安排一个伏击方案,使得在将兔子一网打尽的前提下,参与的
    狼的数量要最小。因为狼还要去找喜羊羊麻烦.

    Input

    第一行为N,M.表示网格的大小,N,M均小于等于1000.
    接下来分三部分
    第一部分共N行,每行M-1个数,表示横向道路的权值. 
    第二部分共N-1行,每行M个数,表示纵向道路的权值. 
    第三部分共N-1行,每行M-1个数,表示斜向道路的权值. 
    输入文件保证不超过10M

    Output

    输出一个整数,表示参与伏击的狼的最小数量.

    Sample Input

    3 4
    5 6 4
    4 3 1
    7 5 3
    5 6 7 8
    8 7 6 5
    5 5 5
    6 6 6

    Sample Output

    14

    HINT

     2015.4.16新加数据一组,可能会卡掉从前可以过的程序。

    Source

    没想到两年前就看了的却一直望而却步没写的BZOJ真正意义上的第一题竟然是道最大流的裸题?????也难怪,2006年还没有什么高深的数据结构被发明出来qwq

    看网上的做法貌似还有SPFA?Orz Orz SPFA 的做法明天再说吧qwq

    反正网络流是很容易就能想得到的qwq

    本以为是10min就能敲完的水题,没想到laj这个辣鸡找了半天愣是没发现哪有错=_= 最后眼睛一斜……突然发现源点和汇点忘记定义了……mmp _(:зゝ∠)_

    对了附上SPFA的题解qwq:http://blog.csdn.net/nikelong0/article/details/50727840

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 typedef long long LL;
     4 const int MAX=1e6+5;
     5 int n,m,s,t;
     6 int tot,head[MAX],adj[MAX*6],wei[MAX*6],next[MAX*6];
     7 int deep[MAX],cur[MAX];
     8 inline int read(){
     9     int an=0,x=1;char c=getchar();
    10     while (c<'0' || c>'9') {if (c=='-') x=-1;c=getchar();}
    11     while (c>='0' && c<='9') {an=(an<<3)+(an<<1)+c-'0';c=getchar();}
    12     return an*x;
    13 }
    14 void addedge(int u,int v,int w){
    15     tot++;adj[tot]=v,wei[tot]=w,next[tot]=head[u],head[u]=tot;
    16 }
    17 bool bfs(){
    18     int i,j,u;
    19     memset(deep,127,sizeof(deep));
    20     deep[s]=0;
    21     queue <int> q;q.push(s);
    22     while (!q.empty()){
    23         u=q.front();q.pop();
    24         for (i=head[u];i;i=next[i]){
    25             if (deep[adj[i]]>1e9 && wei[i]>0)
    26                 deep[adj[i]]=deep[u]+1,q.push(adj[i]);
    27         }
    28     }
    29     return deep[t]<1e9;
    30 }
    31 int dfs(int x,int flo){
    32     if (x==t || flo==0) return flo;
    33     int j;
    34     for (int &i=cur[x];i;i=next[i])
    35         if (deep[adj[i]]==deep[x]+1 && wei[i]>0){
    36             j=dfs(adj[i],min(flo,wei[i]));
    37             if (j) return wei[i]-=j,wei[i^1]+=j,j;
    38         }
    39     return 0;
    40 }
    41 int main(){
    42     freopen ("chase.in","r",stdin);freopen ("chase.out","w",stdout);
    43     int i,j,w;
    44     n=read();m=read();tot=1;s=1,t=n*m;
    45     for (i=1;i<=n;i++)
    46         for (j=1;j<m;j++)
    47             w=read(),addedge((i-1)*m+j,(i-1)*m+j+1,w),addedge((i-1)*m+j+1,(i-1)*m+j,w);
    48     for (i=1;i<n;i++)
    49         for (j=1;j<=m;j++)
    50             w=read(),addedge((i-1)*m+j,i*m+j,w),addedge(i*m+j,(i-1)*m+j,w);
    51     for (i=1;i<n;i++)
    52         for (j=1;j<m;j++)
    53             w=read(),addedge((i-1)*m+j,i*m+j+1,w),addedge(i*m+j+1,(i-1)*m+j,w);
    54     int flow=0,dd;
    55     while (bfs()){
    56         for (i=1;i<=n*m;i++) cur[i]=head[i];
    57         while (dd=dfs(s,1e9)) flow+=dd;
    58     }
    59     printf("%d",flow);
    60     return 0;
    61 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    [置顶] Docker学习总结(3)——Docker实战之入门以及Dockerfile(三)
    [置顶] Docker学习总结(2)——Docker实战之入门以及Dockerfile(二)
    Vue-Router中History模式【华为云分享】
    Linux系统通过FTP进行文档基本操作【华为云分享】
    窥探日志的秘密【华为云分享】
    弹性负载均衡:负载无限,均衡有道【华为云分享】
    不给糖果就捣乱,用Python绘制有趣的万圣节南瓜怪【华为云分享】
    机器学习笔记(八)---- 神经网络【华为云分享】
    还在为运维烦恼?体验云上运维服务,提意见赢好礼!【华为云分享】
    Vue+ElementUI项目使用webpack输出MPA【华为云分享】
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7752591.html
Copyright © 2011-2022 走看看