【HDU - 3870】Catch the Theves(平面图转对偶图最短路,网络流最小割)

题干:

A group of thieves is approaching a museum in the country of zjsxzy,now they are in city A,and the museum is in city B,where keeps many broken legs of zjsxzy.Luckily,GW learned the conspiracy when he is watching stars and told it to zjsxzy. 
Zjsxzy decided to caught these thieves,and he let the police to do this,the police try to catch them on their way from A to B. Although the thieves might travel this way by more than one group, zjsxzy's excellent police has already gather the statistics that the cost needed on each road to guard it. 
Now ,zjsxzy's conutry can be described as a N*N matrix A,Aij indicates the city(i,j) have bidirectionals road to city(i+1,j) and city(i,j+1),gurad anyone of them costs Aij. 
Now give you the map,help zjsxzy to calculate the minimium cost.We assume thieves may travel in any way,and we will catch all passing thieves on a road if we guard it. 

Input

The first line is an integer T,followed by T test cases. 
In each test case,the first line contains a number N(1<N<=400). 
The following N lines,each line is N numbers,the jth number of the ith line is Aij. 
The city A is always located on (1,1) and the city B is always located on (n,n). 
Of course,the city (i,j) at the last row or last line won't have road to (i,j+1) or (i+1,j). 

Output

For each case,print a line with a number indicating the minimium cost to arrest all thieves.

Sample Input

1
3
10 5 5
6 6 20
4 7 9

Sample Output

18

Hint

The map is like this:

题目大意:

有一个n*n个点的格子。输入n*n条边,每个边权代表(i,j) -> (i,j+1) 和 (i,j) -> (i+1,j)这两条边的边权。求左上角到右下角的最小割、

解题报告:

  直接转对偶图跑最短路。但是建图的时候细节要注意一下。别建多了边,写错了符号啥的。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 4e5 + 5;
const int INF = 0x3f3f3f3f;
struct Edge {int u,v,w;int ne;
} e[MAX<<2];
int n;
int head[MAX],tot;
void add(int u,int v,int w) {//加双向边 e[++tot].v = v; e[tot].w = w; e[tot].ne = head[u]; head[u] = tot;e[++tot].v = u; e[tot].w = w; e[tot].ne = head[v]; head[v] = tot;
}
int ID(int x,int y) {return (x-1)*n + y;
}
int dis[MAX],vis[MAX];
struct Point {int pos,dis;Point(int pos=0,int dis=0):pos(pos),dis(dis){}bool operator < (const Point & b) const {return dis > b.dis;}
};
int Dij(int st,int ed) {priority_queue<Point> pq;pq.push(Point(st,0));dis[st]=0;while(pq.size()) {Point cur = pq.top();pq.pop();if(vis[cur.pos]) continue;vis[cur.pos] = 1;for(int i = head[cur.pos]; ~i; i = e[i].ne) {int v = e[i].v;if(dis[v] > dis[cur.pos] + e[i].w) {dis[v] = dis[cur.pos] + e[i].w;pq.push(Point(v,dis[v]));}}				}return dis[ed];
}
int main()
{int t;cin>>t;while(t--) {tot=0;scanf("%d",&n);for(int i = 0; i<=n*n + 2; i++) head[i] = -1,dis[i] = INF,vis[i] = 0;int st = n*n+1,ed=n*n+2;for(int x,i = 1; i<=n; i++) {for(int j = 1; j<=n; j++) {scanf("%d",&x);if( (i==1&&j!=n)|| (j==n&&i!=n) ) add(ID(i,j-(j==n)),ed,x);//和汇点 if( (i==n&&j!=n)|| (j==1&&i!=n) ) add(ID(i-(i==n),j),st,x);//和起点 if(i != 1 && i != n && j != n) add(ID(i-1,j),ID(i,j),x);//水平行之间if(j != 1 && j != n && i != n) add(ID(i,j-1),ID(i,j),x);//竖直列之间 }}printf("%d\n",Dij(st,ed)); }return 0 ;
}

总结:

  建图的过程中虽然非常的显而易见,但是还是出现了细节问题。比如刚开始直接写的和源点和汇点的连边,直接就是i==1||j==n代表和汇点相连,显然这样写会有重边,不光如此,第一行最右侧那一条边在连边的时候,要注意是ID(i,j-1)和ed相连。

还有判断水平边(以水平边为例)的时候,不仅要有i!=1&&i!=n,还要有j!=n这一个条件!总之别落下了判断条件就行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apollo进阶课程 ⑧ | 高精地图的格式规范

目录 高精地图规范格式分类 NDS格式规范 Open DRIVE格式规范 原文链接&#xff1a;Apollo进阶课程 ⑧ | 高精地图的格式规范 上周阿波君为大家详细介绍了「Apollo进阶课程⑦高精地图的采集与生产」。 高精地图采集过程中需要用到的传感器有GPS、IMU和轮速计。 无论是哪种传感…

Apollo进阶课程 ⑨ | 业界的高精地图产品

目录 高精地图的格式规范-OpenDRIVE HERE HD LIve Map HERE HD LIVE MAP-MAP COLLECTION HERE HD Live Map-Crowdsourced Update HERE HD Live Map-Learning HERE HD Live Map-Product MobileEye MobileEye-Pillars of Autonomous Driving MobileEye-Map as back-up s…

Apollo进阶课程⑩ | Apollo地图采集方案

目录 TomTom的高精地图和RoadDNA APOLLO地图采集流程 基站搭建 Apollo地图采集硬件方案 地图数据服务平台 原文链接&#xff1a;进阶课程⑩ | Apollo地图采集方案 上周阿波君为大家详细介绍了「Apollo进阶课程⑨业界的高精地图产品」。 出现在课程中的业界制作高精地图的厂…

用Python写Shell

环境 ubuntu: 18.04python: 3.6.9xnosh: 0.11.0 下载 pip3 install xonsh 简单使用 # 开启xonsh xonsh # 下载小工具&#xff08;也可不下&#xff09;:高亮提示、智能补全 xpip install -U xonsh[full]# 随便下载一个包 pip3 install moneyimport money m1 money.Money(…

Apollo进阶课程⑪ | Apollo地图生产技术

目录 高精地图生产流程 数据采集 数据处理 元素识别 人工验证 全自动数据融合加工 基于深度学习的地图要素识别 人工验证生产 地图成果 原文链接&#xff1a;进阶课程⑪ | Apollo地图生产技术 高精地图是自动驾驶汽车的「千里眼」和「透视镜」。 摄像头、激光雷达、传…

Jenkins初识

Jenkins是啥 官方文档 Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。 Jenkins 支持各种运行方式&#xff0c;可通过系统包、Docker 或者通过一个独立的 Java 程序。CI(Continuous integration&#xff0c;持续集成…

Apollo进阶课程 ⑫ | Apollo高精地图

目录 Apollo高精地图表征元素 Apollo车道模型 UTM坐标系 84坐标系 Track坐标系 Apollo opDRIVE规范 HDMAP引擎 高精地图在政策方面的挑战 原文链接&#xff1a;进阶课程 ⑫ | Apollo高精地图 高精地图与普通地图不同&#xff0c;高精地图主要服务于自动驾驶车辆&#…

一步步编写操作系统 6 启动bochs

运行bochs 终于安装完成了&#xff0c;虽然这过程中有可能会出现各种各样的问题&#xff0c;但还是值得庆祝的&#xff0c;对Linux不熟的朋友第一次就搞定了这么个硬货&#xff0c;我理解您此时的喜大普奔之情&#xff0c;哈哈&#xff0c;给大家点赞。顺便说一句&#xff0c;…

Apollo技能图谱2.0焕新发布 更新7大能力91个知识点

阿波君 Apollo开发者社区 2月26日 过去的一年里&#xff0c;Apollo发展迅速&#xff0c;向智能交通不断渗透。从2.5到3.5版本&#xff0c;无论控制系统的升级、高清地图的泛用和车路协同技术服务的推进&#xff0c;无不在推动自动驾驶技术从开源向开辟商业化新格局位移。 在开…

一步步编写操作系统 07 开机启动bios

bios是如何苏醒的 bios其实一直睡在某个地方&#xff0c;直到被唤醒……前面热火朝天的说了bios的功能和内存布局&#xff0c;似乎还没说到正题上&#xff0c;bios是如何启动的呢。因为bios是计算机上第一个运行的软件&#xff0c;所以它不可能自己加载自己&#xff0c;由此可…

0.《沉浸式线性代数》:前言

今天介绍一本新书《immersive linear algebra》&#xff1a;世界上第一本具有完全交互式图形的线性代数书。本书目前已经更新完毕。 作者是&#xff1a;JacobStrm&#xff0c;Kallestrm和Tomas Akenine-Mller&#xff0c;全文共包含11个部分&#xff1a;前言和10个正文章节。内…

Apollo进阶课程 ⑬ | Apollo无人车自定位技术入门

目录 1.什么是无人车自定位系统 2.为什么无人车需要精确的定位系统 2.1 激光定位 2.2 视觉定位 2.3 惯性导航 2.4 多传感器融合定位 原文链接&#xff1a;进阶课程 ⑬ | Apollo无人车自定位技术入门 上周阿波君为大家详细介绍了「Apollo进阶课程⑫丨Apollo地图生产技术」…

一步步编写操作系统 08 bios跳转到神奇的内存地址0x7c00

为什么是0x7c00 计算机执行到这份上&#xff0c;bios也即将完成自己的历史使命了&#xff0c;完成之后&#xff0c;它又将睡去。想到这里&#xff0c;心中不免一丝忧伤&#xff0c;甚至有些许挽留它的想法。可是&#xff0c;这就是它的命&#xff0c;它生来被设计成这样&…

Apollo进阶课程⑭ | Apollo自动定位技术——三维几何变换和坐标系介绍

目录 1.三维几何变换---旋转 2.三维几何变换----平移 2.1刚体的位置和朝向 3. 坐标系 3.1 ECI地心惯性坐标系 3.2 ECFF地心地固坐标系 3.3当地水平坐标系 3.4 UTM坐标系 3.5 车体坐标系 3.6IMU坐标系 3.7 相机坐标系 3.8 激光雷达坐标系 3.9 无人车定位信息中涉及…

一步步编写操作系统 09 写个mbr

有点不好意思了&#xff0c;说了好久&#xff0c;才说到实质性的东西&#xff0c;好了&#xff0c;赶紧给客官上菜。 代码2-1&#xff08;c2/a/boot/mbr.S&#xff09;1 ;主引导程序2 ;------------------------------------------------------------3 SECTION MBR vstart0x7c…

【2019牛客暑期多校训练营(第二场)- F】Partition problem(dfs,均摊时间优化)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/882/F 来源&#xff1a;牛客网 Given 2N people, you need to assign each of them into either red team or white team such that each team consists of exactly N people and the total competi…

Apollo进阶课程 ⑮丨Apollo自动定位技术详解—百度无人车定位技术

目录 1.百度无人车定位进化历程 2.百度自动驾驶应用的定位技术 2.1GNSS定位技术 2.2载波定位技术 2.3激光点云定位技术 2.4视觉定位技术 原文链接&#xff1a;进阶课程 ⑮丨Apollo自动定位技术详解—百度无人车定位技术 定位的目的是让自动驾驶汽车找到自身确切位置的方法…

一步步编写操作系统 10 cpu的实模式

cpu的实模式 由于mbr在实模式下工作……什么&#xff1f;什么是实模式&#xff1f;这时候有同学打断了我。我心想&#xff0c;这下好办了……哈哈&#xff0c;没有啦&#xff0c;开个玩笑而已。我们这里所说的实模式其实就是8086 cpu的工作环境、工作方式、工作状态&#xff0…

Ubuntu系统中使用搜狗输入法

今天介绍如何在Ubuntu中使用搜狗输入法。&#xff08;Ubuntu版本为16.04&#xff09; 1&#xff09;登陆搜狗官网选择对应系统的搜狗输入法&#xff1a;http://pinyin.sogou.com/linux。 2&#xff09;打开下载目录&#xff0c;命令行输入以下命令&#xff1a; sudo dpkg -i …

2.1)深度学习笔记:深度学习的实践层面

目录 1&#xff09;Train/Dev/Test sets 2&#xff09;Bias/Variance 3&#xff09;Regularization&#xff08;重点&#xff09; 4&#xff09;Why regularization reduces overfitting&#xff08;理解&#xff09; 5&#xff09;Dropout Regularization&#xff08;重点…