题目背景

临近选举,总统要在城市1和城市2举行演讲。他乘汽车完成巡回演讲,从1出发,途中要经过城市2,最后必须回到城市1.特勤局对总统要经过的所有城市监控。为了使得费用最小,必须使得监控的城市最少。求最少要监控的城市。

题目描述

一共有N个城市,有M条有向边。(0<=N,M<=200)有N从1出发途中要经过2,最后要回到1的路线中最少要经过的点的数目。

输入输出格式

输入格式:

第一行包含2个整数N,M。N表示城市的数目,M表示有向边的数目。
接下来M行,每行两个数A,B,表示从A到B有一条有向边。

输出格式:

最少要监控的城市的数量。

输入输出样例

输入样例#1:

6 7
1 3
3 4
4 5
5 1
4 2
2 6
6 3
输出样例#1:

6

说明

0<=N,M<=200

本题数据加强by Imagine

Solution:

  本题最短路+dp。

  我们先用floyd预处理出$w[i][j]$,表示$i\rightarrow j$经过的最少点数(除了i)。

  由于要求$1\rightarrow 2\rightarrow 1$经过的最少点数,而模型是个有向图,考虑dp,定义状态$f[i][j]$表示$1\rightarrow i\rightarrow j\rightarrow 1$经过的最少点数,初始化$f[1][1]=1$,状态转移方程:$f[x][y]=min(f[x][y],f[a][b]+w[b][x]+w[x][y]+w[y][a]-1)$(注意-1是因为a被多算了1次),直接dp显然是有后效性的,注意到每次由小的点对更新状态肯定最优,于是状态转移时套用堆优化dijkstra,用全局最小值$f[a][b]$去更新状态就好了。

  转移时还需注意不能用点对$f[a][b]$更新自己(当a==b时直接RE)。

  时间复杂度$O(n^3\log n)$

代码:

/*Code by 520 -- 9.4*/
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/priority_queue.hpp>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
using namespace std;
using namespace __gnu_pbds;
const int N=,inf=;
int n,m,w[N][N],dis[N][N];
struct node{
int u,v,d;
bool operator<(const node &a)const{
if(d==a.d&&u==a.u)return v>a.v;
if(d==a.d)return u>a.u;
return d>a.d;
}
};
typedef __gnu_pbds::priority_queue<node,less<node>,pairing_heap_tag> heap;
heap q;
heap::point_iterator id[N][N]; int main(){
scanf("%d%d",&n,&m);
For(i,,n) For(j,,n) w[i][j]=i==j?:inf,dis[i][j]=inf;
int u,v;
while(m--) scanf("%d%d",&u,&v),w[u][v]=;
For(k,,n) For(i,,n) For(j,,n) w[i][j]=min(w[i][j],w[i][k]+w[k][j]);
dis[][]=,id[][]=q.push(node{,,dis[][]});
while(){
node x=q.top();
int a=x.u,b=x.v;q.pop();
if(a==&&b==)break;
For(c,,n) For(d,,n) {
if(a==c&&b==d)continue;
if(dis[a][b]+w[b][c]+w[c][d]+w[d][a]-<dis[c][d]){
dis[c][d]=dis[a][b]+w[b][c]+w[c][d]+w[d][a]-;
if(id[c][d]==)id[c][d]=q.push(node{c,d,dis[c][d]});
else q.modify(id[c][d],node{c,d,dis[c][d]});
}
}
}
cout<<dis[][];
return ;
}

 

P4610 [COCI2011-2012#7] KAMPANJA的更多相关文章

  1. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  2. Windows Server 2012 NIC Teaming介绍及注意事项

    Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...

  3. 1.初始Windows Server 2012 R2 Hyper-V + 系统安装详细

    干啥的?现在企业服务器都是分开的,比如图片服务器,数据库服务器,redis服务器等等,或多或少一个网站都会用到多个服务器,而服务器的成本很高,要是动不动采购几十台,公司绝对吃不消的,于是虚拟化技术出来 ...

  4. 0.Win8.1,Win10,Windows Server 2012 安装 Net Framework 3.5

    后期会在博客首发更新:http://dnt.dkill.net 网站部署之~Windows Server | 本地部署:http://www.cnblogs.com/dunitian/p/482280 ...

  5. windows 2012 r2 can't find kb2919355

    问题   解决: 1.手动安装了 Windows8.1-KB2919442-x64 2.手动下载 KB2919355 更新成功     Turns out to have been a result ...

  6. Windows Server 2012 磁盘管理之 简单卷、跨区卷、带区卷、镜像卷和RAID-5卷

    今天给客户配置故障转移群集,在Windows Server 2012 R2的系统上,通过iSCSI连接上DELL的SAN存储后,在磁盘管理里面发现可以新建 简单卷.跨区卷.带区卷.镜像卷.RAID-5 ...

  7. VMware下Windows Server 2012添加新磁盘

    系统管理员在VM下新装了一台Windows Server 2012服务器,我在上面安装了SQL Server 2014 Standard版数据库,安装之初,只分配了一个C盘,我想在这台服务器上添加了三 ...

  8. 在Windows Server 2012中如何快速开关桌面上经典的“计算机、我的文档”等通用图标

    我们都知道,在Windows Server 2012系列的服务器版本中都已经引入了Modern的现代界面作为默认的用户交互界面,同时满足视觉一致化,新版的服务器管理程序也做成了扁平化.因此传统的计算机 ...

  9. VmWare平台Windows Server 2012 无响应宕机

    我们生产服务器都部署在VMware ESXi 5.5平台上,最近大半年的时间,偶尔就会出现操作系统为Windows Servre 2012的服务器出现没有任何响应(unresponsive)的情况,出 ...

随机推荐

  1. 环境配置(pycharm+virtualenv+git+github等)

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/87315081 铺垫 数据表示方式 - 计算机使用二进制作为自己的机器语言也就是数据的表示方 ...

  2. [伟哥开源项目基金会](https://github.com/AspNetCoreFoundation)

    伟哥开源项目基金会 GitHub_base=> 伟哥开源项目基金会 该项目作者为伟哥,GitHub地址:https://github.com/amh1979: 该项目维护者为鸟窝,GitHub地 ...

  3. 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记

    1.前言: 异常.本该是多么优雅的东西,然而,得全靠自己在零散的信息中汇集. 学习笔记保持更新. 2.教材(参考资料) 其他 ①受检异常与非受检异常:https://www.cnblogs.com/j ...

  4. Vue一个案例引发的递归组件的使用

    今天我们继续使用 Vue 的撸我们的实战项目,只有在实战中我们才会领悟更多,光纸上谈兵然并卵,继上篇我们的<Vue一个案例引发的动态组件与全局事件绑定总结> 之后,今天来聊一聊我们如何在项 ...

  5. ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门

    一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...

  6. JS中简单的二级城市联动

    代码奉上: <!DOCTYPE html><html><head>    <meta charset="UTF-8">    < ...

  7. centos7中/tmp文件保存天数

    不要在/tmp目录下保存文件,该目录会定期清理文件 /tmp默认保存10天 /var/tmp默认保存30天 配置文件:/usr/lib/tmpfiles.d/tmp.conf 默认配置文件:# Thi ...

  8. MySQL的Limit详解

    问题:数据库查询语句,如何只返回一部分数据? Top子句 TOP 子句用于规定要返回的记录的数目.对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 在SQL Server数据库中语法为: S ...

  9. 记录基于VMware虚拟机, Linux7.2下外部主机访问配置

    systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动

  10. Linux查看mysql 安装路径和运行路径

    一.查看文件安装路径 由于软件安装的地方不止一个地方,所有先说查看文件安装的所有路径(地址). 这里以mysql为例.比如说我安装了mysql,但是不知道文件都安装在哪些地方.放在哪些文件夹里,可以用 ...