bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割
平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割 找到最小环(即最短路)极为所求,注意辅助边的建立
加入读入优化 不过时间还是一般 估计是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]狼抓兔子 平面图最小割的更多相关文章
- 【BZOJ】1001: [BeiJing2006]狼抓兔子(最小割 / 对偶图)
题目 传送门:QWQ 分析 显然答案是最小割. 然后dinic卡一卡过去了. 其实是懒得写转对偶图:正解 (dinic原来写的是vector,后来改的比较鬼畜 代码 #include <bits ...
- BZOJ 1001 [BeiJing2006] 狼抓兔子(平面图最大流)
题目大意 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的.而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 23822 Solved: 6012[Submit][ ...
- BZOJ 1001: [BeiJing2006]狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 20029 Solved: 4957[Submit][ ...
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
- BZOJ 1001 [BeiJing2006]狼抓兔子 (UVA 1376 Animal Run)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 24727 Solved: 6276[Submit][ ...
- BZOJ 1001: [BeiJing2006]狼抓兔子(最短路)
平面图的最小割转化为对偶图的最短路(资料:两极相通——浅析最大最小定理在信息学竞赛中的应用) ,然后DIJKSTRA就OK了. ------------------------------------ ...
- BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图
BZOJ_2001_[BeiJing2006]狼抓兔子 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析:思路同NOI2010海拔. ...
- bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...
随机推荐
- FFMpeg那些事——独立运行的二进制文件ffmpeg编译
想编译一个Android可用的二进制文件(要求:支持libx264/liblamemp3) github资源: 1.首先编译一个带lame库的ffmpeg https://github.com/aks ...
- jquery cookie 用法
jquery cookie 用法 $.cookie("name","value","options") 当不设置options时,此coo ...
- lintcode:在二叉查找树中插入节点
题目: 在二叉查找树中插入节点 给定一棵二叉查找树和一个新的树节点,将节点插入到树中. 你需要保证该树仍然是一棵二叉查找树. 样例 给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样 ...
- *[codility]Country network
https://codility.com/programmers/challenges/fluorum2014 http://www.51nod.com/onlineJudge/questionCod ...
- Zookeeper安装部署
Zookeeper安装 1. 安装 wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz ...
- Java学习笔记之:Java数据类型的转换
一.介绍 数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受 ...
- openfire+spark+smack实现即时通讯
近公司项目需要用到即时通讯功能,经过调研发现openfire+spark+smack可以实现.在网上找了很久,资料都十分有限,即使有些朋友实现了也说的不清不楚.于是决定自己研究,耗时一周的时间实现了文 ...
- 使用 powershell 的 grep 过滤文本
使用 powershell 的 grep 过滤文本 有个log文件,大小在4M左右,要求找出里面耗时超过100s 的记录.首先想到了强大的 grep ,那么就搞起. 先在网上找一下资料,这篇文章,有几 ...
- 构建linux内核源码树
编写驱动程序时,需要内核源码树的支持.内核源码树时从内核源代码编译得到的.下面开始构造内核源代码的步骤.以Ubuntu为例子 1. 下载内源代码,位置www.kernel.org. (注意:源码树内核 ...
- arcgis engine 开发之QI
ArcGIS Engine开发基础之QI AO开发中QI(接口查询)非常重要,从某种意义上说不会QI就不会做AO开发. 在讲ArcGIS Engine开发QI实例操作之前,以一个现实生活例子以方便大家 ...