【UVA1057】Routing
【UVA1057】Routing
题面
题解
有一个比较好想的dp就是\(f_{i,j}\)表示第一个点在\(i\),第二个点在\(j\)的最小点数,但是直接搞不好转移。
考虑建出反图,那么\(j\)表示在反图上的点\(j\)其实是和正图上的是一样的。
这样子的话我们枚举出边转移:
f[u1][v]=f[u1][u2]+[u1!=v],((u2,v)\in G')
\]
然而我们交换两条路径时发现点数会算多,这种情况我们用另一种方式转移:
\]
其中\(dis[u1][u2]\)表示\(u1,u2\)间的最短路,可以用\(floyd\)求出。
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int INF = 1e9;
const int MAX_N = 105;
int N, M;
int f[MAX_N][MAX_N], dis[MAX_N][MAX_N];
vector<int> G[MAX_N], E[MAX_N];
bool inq[MAX_N][MAX_N];
void spfa() {
queue<pair<int, int> > que;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++) f[i][j] = INF;
f[1][1] = 1, inq[1][1] = 1, que.push(make_pair(1, 1));
while (!que.empty()) {
pair<int, int> p = que.front(); que.pop();
int x1 = p.first, x2 = p.second;
for (auto v : G[x1])
if (f[v][x2] > f[x1][x2] + (v != x2)) {
f[v][x2] = f[x1][x2] + (v != x2);
if (!inq[v][x2]) inq[v][x2] = 1, que.push(make_pair(v, x2));
}
for (auto v : E[x2])
if (f[x1][v] > f[x1][x2] + (v != x1)) {
f[x1][v] = f[x1][x2] + (v != x1);
if (!inq[x1][v]) inq[x1][v] = 1, que.push(make_pair(x1, v));
}
if (x1 != x2 && f[x2][x1] > f[x1][x2] + dis[x1][x2] - 1) {
f[x2][x1] = f[x1][x2] + dis[x1][x2] - 1;
if (!inq[x2][x1]) inq[x2][x1] = 1, que.push(make_pair(x2, x1));
}
inq[x1][x2] = 0;
}
}
int main () {
int Case = 0;
while (scanf("%d %d", &N, &M) != EOF) {
if (!N && !M) break;
printf("Network %d\n", ++Case);
for (int i = 1; i <= N; i++) G[i].clear(), E[i].clear();
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++) dis[i][j] = INF;
for (int i = 1; i <= N; i++) dis[i][i] = 0;
for (int i = 1; i <= M; i++) {
int u, v; scanf("%d %d", &u, &v);
dis[u][v] = 1, G[u].push_back(v), E[v].push_back(u);
}
for (int k = 1; k <= N; k++)
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
if (dis[1][2] == INF || dis[2][1] == INF) puts("Impossible");
else spfa(), printf("Minimum number of nodes = %d\n", f[2][2]);
putchar('\n');
}
return 0;
}
【UVA1057】Routing的更多相关文章
- 【RabbitMQ】 Routing
Routing 之前的章节里我们构建了一个简单的日志系统.我们可以广播所有的日志消息给所有的接收端. 本节我们将给它添加一个新特性 - 我们将允许只订阅一个消息的子集.例如,我们只将关键的错误消息定位 ...
- 【c#】RabbitMQ学习文档(四)Routing(路由)
(使用Net客户端) 在上一个教程中,我们构建了一个简单的日志系统,我们能够向许多消息接受者广播发送日志消息. 在本教程中,我们将为其添加一项功能 ,这个功能是我们将只订阅消息的一个子集成为可能. 例 ...
- 7.ASP.NET MVC 5.0中的Routing【路由】
大家好,这一篇向大家介绍ASP.NET MVC路由机制.[PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers[HTML帮助类] ] 路由是一个模式匹配系统,它确保 ...
- Asp.NET MVC 拍卖网站,拆解【2】 Asp.NET MVC章回,第(1)节
时间和篇幅所限,MVC不会介绍基本的建站过程,请参照博客园技术专题文章传送门 英语足够好的请直接去微asp.net 官网 传送门(强烈推荐,尤其是想使用最新技术的时候更应该直接去官网),本文主要介绍 ...
- Web应用程序系统的多用户权限控制设计及实现-项目架构【3】
本章主要讲述Web权限管理系统的项目架构,及开发中需要的基本类和相关的CSS,JS文件. 1.1系统结构 本系统搭建开发工具为Visual Studio 2012,采用ASP.NET MVC 4.0技 ...
- 【WebApi】————.net WebApi开发(一)
2013年08月08日 ⁄ 综合 ⁄ 共 554字 ⁄ 字号 小 中 大 ⁄ 评论关闭 [1].部署环境.net4及以上版本. [2].vs2010 开发需单独安装vs2010 sp1和mvc4 m ...
- SCI&EI 英文PAPER投稿经验【转】
英文投稿的一点经验[转载] From: http://chl033.woku.com/article/2893317.html 1. 首先一定要注意杂志的发表范围, 超出范围的千万别投,要不就是浪费时 ...
- 【转】ASP.NET MVC教程
转自:http://www.cnblogs.com/QLeelulu/category/123326.html ASP.NET MVC的最佳实践与性能优化的文章 摘要: 就一些文章链接,就不多废话了. ...
- 转:【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链
[译]Asp.net MVC 利用自定义RouteHandler来防止图片盗链 你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你 ...
随机推荐
- ML学习笔记之LATEX数学公式基本语法
作者:@houkai本文为作者原创,转载请注明出处:https://www.cnblogs.com/houkai/p/3399646.html 0x00 概述 TEX 是Donald E. Knuth ...
- React 根据条件自动计算
1.输入框 <Item {...formItemProps} label="留房日期"> {getFieldDecorator('date', { rules: [{ ...
- AnimationClip压缩-动画文件压缩
动画压缩方法一.常用方法1. Rig->Animation Type:改为Generic2. Animations->Anim.Compression:Optimal二.高级方法1. 去掉 ...
- C#安装和卸载windowsService的bat指令
只需新建2个文本文档,将2个指令分别复制进去,再将txt格式改为bat格式,以管理员身份运行 安装指令 %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\ ...
- 简单的C#日志记录和弹出提示
记录这个博客的想法只有两点, 一,在使用webserver的时候如果你不好调用本地server端,那么你可以启用日志来查看异常.当然也可以调用本地的server端.这里简单说一下.不是本文的重点. 发 ...
- python基础03day
# 1. # 创建字符串变量的三种写法及其区别 # 代码: #‘’.“”.“““””” # 区别: # 2. # 简述,计算机编程语言的分类及特点 # 1.机器 # 2.汇编 # 3.高级 # 3.1 ...
- 很带劲,Android9.0可以在i.MX8开发板上这样跑
米尔MYD-JX8MX开发板移植了Android9.0操作系统,现阶段最高版本的Android9.0操作系统将给您的产品在安全与稳定性方面带来更大的提升.可惜了,这里不能上传视频在i.MX8开发板跑A ...
- 13、vue如何解决跨域问题
开发环境:配置config文件夹中index.js文件: proxyTable: { '/api': { target: 'http://10.10.1.242:8245',//后端地址 // sec ...
- Gateway-Worker启动失败或者启动无法正常使用的几种方法
Workerman是一款开源高性能异步PHP socket即时通讯框架.支持高并发,超高稳定性,被广泛的用于手机app.移动通讯,微信小程序,手游服务端.网络游戏.PHP聊天室.硬件通讯.智能家居.车 ...
- Golang: 接收命令行输入
上次我们介绍了收集命令行参数的几种方式,感觉还是不过瘾,今天再来介绍一下如何从命令行接收用户输入. 我们这里设计一个小需求,借助程序从命令行收集用户的逐行输入,以 bye 为结束信号,然后在输入结束后 ...