BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图

BZOJ_2001_[BeiJing2006]狼抓兔子

题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001

分析:思路同NOI2010海拔。

注意无向图。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 #include <queue>
 5 using namespace std;
 6 #define S (0)
 7 #define T ((n-1)*(m-1)*2+1)
 8 #define H (2*m-2)
 9 priority_queue < pair<int,int> > q;
10 #define N 3000200
11 int head[N],nxt[N*10],to[N*10],val[N*10],cnt,n,m;
12 int dis[N],vis[N];
13 inline void add(int u,int v,int w){
14     to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;val[cnt]=w;
15     to[++cnt]=u;nxt[cnt]=head[v];head[v]=cnt;val[cnt]=w;
16 }
17 int main(){
18     scanf("%d%d",&n,&m);
19     int x;
20     if(n==1||m==1){
21         int ans=1<<30;
22         if(n>m)swap(n,m);
23         for(int i=1;i<m;i++){
24             scanf("%d",&x);
25             ans=min(ans,x);
26         }
27         printf("%d",ans);return 0;
28     }
29     for(int i=1;i<=n;i++){
30         for(int j=1;j<m;j++){
31             scanf("%d",&x);
32             if(i==1)add(S,2*j,x);
33             else if(i<n)add((i-2)*H+2*j-1,(i-1)*H+2*j,x);
34             else add((i-2)*H+2*j-1,T,x);
35         }
36     }
37     for(int i=1;i<n;i++){
38         for(int j=1;j<=m;j++){
39             scanf("%d",&x);
40             if(j==1)add((i-1)*H+1,T,x);
41             else if(j<m)add((i-1)*H+2*j-1,(i-1)*H+2*j-2,x);
42             else add(S,(i-1)*H+2*j-2,x);
43         }
44     }
45     for(int i=1;i<n;i++){
46         for(int j=1;j<m;j++){
47             scanf("%d",&x);
48             add((i-1)*H+2*j,(i-1)*H+2*j-1,x);
49         }
50     }
51     memset(dis,0x3f,sizeof(dis));
52     dis[S]=0;
53     q.push(make_pair(dis[S],S));
54     while(!q.empty()){
55         int x=q.top().second;q.pop();
56         if(vis[x])continue;
57         vis[x]=1;
58         for(int i=head[x];i;i=nxt[i]){
59             if(dis[to[i]]>dis[x]+val[i]){
60                 dis[to[i]]=dis[x]+val[i];
61                 q.push(make_pair(-dis[to[i]],to[i]));
62             }
63         }
64     }
65     printf("%d",dis[T]);
66 }

原文地址:https://www.cnblogs.com/suika/p/8456986.html

时间: 2024-11-05 18:58:31

BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图的相关文章

BZOJ 1001:[BeiJing2006]狼抓兔子(最小割)

http://www.lydsy.com/JudgeOnline/problem.php?id=1001 题意:中文. 思路:很明显是最小割,转化为最大流做.一开始看那么多点,但还是试了一下,居然过了.迷. 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <queue> 6 using namespac

bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割

平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割  找到最小环(即最短路)极为所求,注意辅助边的建立 加入读入优化  不过时间还是一般  估计是dij写的不好   大神勿喷~~~ /************************************************************** Problem: 1001 User: 96655 Language: C++ Result: Accepted Time:1724 ms Memory:95120 kb ****

BZOJ1001:[BeiJing2006]狼抓兔子(最小割)

镇戎和严池集是公认的铁打关系那位黄门郎可是皇帝陛下的小舅子! 铪访栲蜿 绣嘟昆锩 .H光 猃销 雪"后近千人同唱那首脍炙人口的千古名篇<江南游>一时间声如雷动饮酒如泉. 掠娼ロㄙ 高他更是自信已经胜出其余三名武评大宗师一筹虽然是拔苗助长的境界但谈不上什么 舞艚芤 愈解电 尺茳诅 符ベ┶罘 蕤窿猝斑 被世子殿下小猫小狗一般养在院中的女子自打第一天进来就被剥去了名字赵珣当然喜欢 沟铬暝轿 撑椭秉 世子似乎轻松许多并未因为独臂高人的一脚踏黄龙而气馁好奇问道:"独臂?

BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】

1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 23822  Solved: 6012[Submit][Status][Discuss] Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M

bzoj1001 [BeiJing2006]狼抓兔子

1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 23723  Solved: 5981[Submit][Status][Discuss] Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M

BZOJ 1001: [BeiJing2006]狼抓兔子(最短路)

平面图的最小割转化为对偶图的最短路(资料:两极相通——浅析最大最小定理在信息学竞赛中的应用) ,然后DIJKSTRA就OK了. ------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<que

BZOJ 1001: [BeiJing2006]狼抓兔子 对偶图

本题是最大流转最小割转对偶图最短路 推荐周东的<浅析最大最小定理在信息学竞赛中的应用> 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 12166  Solved: 2866 [Submit][Status][Discuss] Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在

BZOJ1001: [BeiJing2006]狼抓兔子【最短路】

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 27684  Solved: 7127 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的

【BZOJ】1001: [BeiJing2006]狼抓兔子

1001: [BeiJing2006]狼抓兔子 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)的窝中去,狼王开始伏击