平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割  找到最小环(即最短路)极为所求,注意辅助边的建立

加入读入优化  不过时间还是一般  估计是dij写的不好   大神勿喷~~~

/**************************************************************
Problem: 1001
User: 96655
Language: C++
Result: Accepted
Time:1724 ms
Memory:95120 kb
****************************************************************/ #include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<cstdlib>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<cmath>
#include<stack>
#include<utility>
using namespace std;
const int maxn=;
const int INF=0x3f3f3f3f;
struct Edge
{
int v,w,next;
} edge[maxn*];
int head[maxn*],p,n,m,y;
void addedge(int u,int v,int w)
{
edge[p].w=w;
edge[p].v=v;
edge[p].next=head[u];
head[u]=p++;
}
struct asd
{
int x,d;
asd (int a,int b):x(a),d(b) {}
bool operator<(const asd &e)const
{
return d>e.d;
}
};
priority_queue<asd>q;
int dis[maxn*],vis[maxn*];
void Dijkstra(int s)
{
memset(vis,,sizeof(vis));
while(!q.empty())q.pop();
for(int i=; i<=y; i++)
dis[i]=INF;
dis[s]=;
q.push(asd(s,));
while(!q.empty())
{
asd e=q.top();
q.pop();
if(vis[e.x])continue;
vis[e.x]=;
for(int i=head[e.x]; i!=-; i=edge[i].next)
{
int v=edge[i].v;
if(dis[v]>dis[e.x]+edge[i].w)
{
dis[v]=dis[e.x]+edge[i].w;
q.push(asd(v,dis[v]));
}
}
}
}
void read(int &x)
{
char c;
while((c=getchar())<'' || c>'');
x=c-'';
while((c=getchar())>='' && c<='') x=(x<<)+(x<<)+c-'';
}
int main()
{
read(n);
read(m);
if(n==||m==)
{
if(n>m)swap(n,m);
int ans=INF,a;
for(int i=; i<m; i++)
{
scanf("%d",&a);
ans=min(a,ans);
}
if(ans==INF)printf("0\n");
else printf("%d\n",ans);
return ;
}
memset(head,-,sizeof(head));
p=;
y=(n-)*(m-)*+;
int w,u,v;
for(int i=; i<=n; i++)
{
for(int j=; j<m; j++)
{
read(w);
if(i==)
{
u=((i-)*(m-)+j)*;
addedge(u,y,w);
addedge(y,u,w);
}
else if(i==n)
{
u=((i-)*(m-)+j)*-;
addedge(,u,w);
}
else
{
u=((i-)*(m-)+j)*;
v=((i-)*(m-)+j)*-;
addedge(u,v,w);
addedge(v,u,w); }
}
}
for(int i=; i<n; i++)
{
for(int j=; j<=m; j++)
{
read(w);
if(j==)
{
u=((i-)*(m-)+j)*-;
addedge(,u,w);
addedge(u,,w); }
else if(j==m)
{
u=((i-)*(m-)+j-)*;
addedge(u,y,w);
addedge(y,u,w); }
else
{
u=((i-)*(m-)+j)*-;
v=((i-)*(m-)+j-)*;
addedge(u,v,w);
addedge(v,u,w); }
}
}
for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
read(w);
u=((i-)*(m-)+j)*-;
v=((i-)*(m-)+j)*;
addedge(u,v,w);
addedge(v,u,w);
}
}
Dijkstra();
printf("%d\n",dis[y]);
return ;
}

bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割的更多相关文章

  1. 【BZOJ】1001: [BeiJing2006]狼抓兔子(最小割 / 对偶图)

    题目 传送门:QWQ 分析 显然答案是最小割. 然后dinic卡一卡过去了. 其实是懒得写转对偶图:正解 (dinic原来写的是vector,后来改的比较鬼畜 代码 #include <bits ...

  2. BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)

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

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

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 23822  Solved: 6012[Submit][ ...

  4. BZOJ 1001: [BeiJing2006]狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 20029  Solved: 4957[Submit][ ...

  5. [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 31805  Solved: 8494[Submit][ ...

  6. BZOJ 1001 [BeiJing2006]狼抓兔子 (UVA 1376 Animal Run)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 24727  Solved: 6276[Submit][ ...

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

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

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

    BZOJ_2001_[BeiJing2006]狼抓兔子 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析:思路同NOI2010海拔. ...

  9. bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...

随机推荐

  1. FFMpeg那些事——独立运行的二进制文件ffmpeg编译

    想编译一个Android可用的二进制文件(要求:支持libx264/liblamemp3) github资源: 1.首先编译一个带lame库的ffmpeg https://github.com/aks ...

  2. jquery cookie 用法

    jquery cookie 用法 $.cookie("name","value","options")  当不设置options时,此coo ...

  3. lintcode:在二叉查找树中插入节点

    题目:  在二叉查找树中插入节点 给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树.  样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样 ...

  4. *[codility]Country network

    https://codility.com/programmers/challenges/fluorum2014 http://www.51nod.com/onlineJudge/questionCod ...

  5. Zookeeper安装部署

    Zookeeper安装 1. 安装 wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz ...

  6. Java学习笔记之:Java数据类型的转换

    一.介绍 数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受 ...

  7. openfire+spark+smack实现即时通讯

    近公司项目需要用到即时通讯功能,经过调研发现openfire+spark+smack可以实现.在网上找了很久,资料都十分有限,即使有些朋友实现了也说的不清不楚.于是决定自己研究,耗时一周的时间实现了文 ...

  8. 使用 powershell 的 grep 过滤文本

    使用 powershell 的 grep 过滤文本 有个log文件,大小在4M左右,要求找出里面耗时超过100s 的记录.首先想到了强大的 grep ,那么就搞起. 先在网上找一下资料,这篇文章,有几 ...

  9. 构建linux内核源码树

    编写驱动程序时,需要内核源码树的支持.内核源码树时从内核源代码编译得到的.下面开始构造内核源代码的步骤.以Ubuntu为例子 1. 下载内源代码,位置www.kernel.org. (注意:源码树内核 ...

  10. arcgis engine 开发之QI

    ArcGIS Engine开发基础之QI AO开发中QI(接口查询)非常重要,从某种意义上说不会QI就不会做AO开发. 在讲ArcGIS Engine开发QI实例操作之前,以一个现实生活例子以方便大家 ...