hdu3870-Catch the Theves(平面图最小割)
解析:平面图最小割,把面当成点,然后用最短路求最小割,详见百度
代码
- #include<cstdio>
- #include<cstring>
- #include<string>
- #include<algorithm>
- #include<vector>
- #include<queue>
- using namespace std;
- typedef __int64 LL;
- const LL INF=;
- const int maxn=**;
- int N,eid,head[maxn];
- struct edge{ int v,w,next; }E[*maxn];
- void AddEdge(int u,int v,int w)
- {
- E[++eid].v=v; E[eid].w=w; E[eid].next=head[u]; head[u]=eid;
- E[++eid].v=u; E[eid].w=w; E[eid].next=head[v]; head[v]=eid;
- }
- int f(int x,int y){ return x*(N-)+y; }
- struct node
- {
- int u;
- LL d;
- node(int u=,LL d=):u(u),d(d){}
- bool operator < (const node& t) const{ return d>t.d; }
- };
- priority_queue<node> que;
- LL D[maxn];
- bool vis[maxn];
- int Dij(int S,int T)
- {
- while(!que.empty()) que.pop();
- for(int i=;i<maxn;i++) D[i]=INF;
- D[S]=;
- memset(vis,false,sizeof(vis));
- que.push(node(S,));
- while(!que.empty())
- {
- node t=que.top(); que.pop();
- int u=t.u;
- if(vis[u]) continue;
- vis[u]=true;
- for(int i=head[u];i!=-;i=E[i].next)
- {
- edge& e=E[i];
- int v=e.v,w=e.w;
- if(D[v]>D[u]+w)
- {
- D[v]=D[u]+w;
- que.push(node(v,D[v]));
- }
- }
- }
- return D[T];
- }
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d",&N);
- int s=,t=(N-)*(N-)+;
- memset(head,-,sizeof(head));
- eid=;
- int u,v,w;
- for(int i=;i<=N;i++)
- for(int j=;j<=N;j++)
- {
- scanf("%d",&w);
- if(i==&&j<N)
- {
- u=s; v=j;
- AddEdge(u,v,w);
- }
- if(i==N&&j<N)
- {
- u=f(i-,j); v=t;
- AddEdge(u,v,w);
- }
- if(<i&&i<N&&j<N)
- {
- u=f(i-,j);
- v=f(i-,j);
- AddEdge(u,v,w);
- }
- if(j==&&i<N)
- {
- u=f(i-,j); v=t;
- AddEdge(u,v,w);
- }
- if(j==N&&i<N)
- {
- u=f(i-,j-); v=s;
- AddEdge(u,v,w);
- }
- if(<j&&j<N&&i<N)
- {
- u=f(i-,j-);
- v=f(i-,j);
- AddEdge(u,v,w);
- }
- }
- printf("%d\n",Dij(s,t));
- }
- return ;
- }
hdu3870-Catch the Theves(平面图最小割)的更多相关文章
- tyvj P1209 - 拦截导弹 平面图最小割&&模型转化
P1209 - 拦截导弹 From admin Normal (OI)总时限:6s 内存限制:128MB 代码长度限制:64KB 背景 Background 实中编程者联盟为了培养技 ...
- [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】
题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...
- B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij
B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij 题意:城市被东西向和南北向的主干道划分为n×n个区域.城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向 ...
- 【平面图最小割】BZOJ1001- [BeiJing2006]狼抓兔子
[题目大意]左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 1:(x,y)<==>(x+1,y) 2:(x,y)<==>(x,y+1) ...
- 【平面图最小割】BZOJ2007-[NOI2010]海拔
[题目大意] 城市被东西向和南北向的主干道划分为n×n个区域,包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向道路.现得到了每天每条道路两个方向的人流量.每一个交叉路口都有海拔,每向上爬h ...
- BZOJ 2007 海拔(平面图最小割转对偶图最短路)
首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...
- bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...
- 【BZOJ1001】狼抓兔子(平面图最小割转最短路)
题意:有一张平面图,求它的最小割.N,M.表示网格的大小,N,M均小于等于1000. 左上角点为(1,1),右下角点为(N,M).有以下三种类型的道路 1:(x,y)<==>(x+1,y ...
- BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路
问题描述 BZOJ2007 LG2046 题解 发现左上角海拔为 \(0\) ,右上角海拔为 \(1\) . 上坡要付出代价,下坡没有收益,所以有坡度的路越少越好. 所以海拔为 \(1\) 的点,和海 ...
随机推荐
- <php>删除(有内容的)文件夹函数程序
function deldir($dirname) { if(!file_exists($dirname)) {//判断文件夹是否存在 die("文件夹不存在!");//作用等于( ...
- github atom 试用
github的编辑器atom 1.0已经出来了,在https://atom.io/ 我之前在win上一直用notepad++写了两年脚本.最近改写lua了,项目组统一用的sublime text.su ...
- JavaScript 判断一个字符串是否在另一个字符串中
传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法. includes():返回布尔值,表示是否找到了参数字符串. start ...
- WebSphere之wasprofile.sh使用
概要文件(profile) 6.0版本以后才有profile,目的是将用户数据和was本身的文件分开,这样可以定义多个profile,每个profile相当于一个用户,相当于提供了多用户的支持. pr ...
- javasscript学习笔记 之 数组学习二 数组的所有方法
1.push() 和 pop() 栈的方法 后进先出 push() 该方法是向数组末尾添加一个或者多个元素,并返回新的长度. push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返 ...
- openssl 非对称加密算法DSA命令详解
1.DSA算法概述 DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换. DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括 ...
- 【转】深入理解篇UIScrollerView
转自:http://www.mamicode.com/info-detail-1144770.html 接下来,我整理一下自己的思路,深入理解 UIScrollView 基本点 : 1 . UIScr ...
- Javascript进阶篇——总结--DOM案例+选项卡效果
断断续续的把慕课的JavaScript基础和进阶看完了,期间不怎么应用有的都忘记了,接下来多开始写些效果,进行实际应用. 制作一个表格,显示班级的学生信息. 1. 鼠标移到不同行上时背景色改为色值为 ...
- AutoMapper2
1.嵌套映射 namespace Second { class Program { static void Main(string[] args) { Mapper.CreateMap<Oute ...
- 点击<a>标签,禁止页面自动跳到顶部的解决办法
最近在开发一个小web的时候想给一个按钮增加一个弹出dialog功能,但是发现点击按钮后页面总是自动滚动至顶部,这点从用户体验上来讲是极其不爽的,于是开始跳进google大池寻求解决办法.网上的 ...