先声明一下:这篇题解纯粹是对原题解的翻译与修复,并非原创。

解法是 DP + 最短路。这个思想并不是很少见,而这题强化了 DP 的思维难度。

设 f[i][j] 为 1~i,2~j 所经过的点数最少的路径的点数(考虑了重复点)。

给出转移方程:

f[i2][j] = min(f[i][j] + [i2 != j] | g[i][i2] = 1)

f[i][j2] = min(f[i][j] + [i != j2] | g[j2][j] = 1)

f[j][i] = min(f[j][i], f[i][j] + dis[i][j] - 1)

(f 是 DP 数组,dis 为两点最短路,g 是邻接矩阵)

初始化 f[1][1] = 1,那么答案就是 f[2][2]。

反着来是类似的。

#include <bits/stdc++.h>using namespace std;const int N = 100 + 5;
const int INF = 0x3f3f3f3f;    int dis[N][N];
int f[N][N];
bool inq[N][N];
vector<int> g1[N], g2[N];int main() {    int n, m, kase = 0;while (scanf("%d %d", &n, &m) == 2 && n) {for (int i = 1; i <= n; i++) {g1[i].clear();g2[i].clear();}memset(dis, INF, sizeof dis);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;g1[u].push_back(v);g2[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]);}}}printf("Network %d\n", ++kase);if (dis[1][2] != INF && dis[2][1] != INF) {memset(f, INF, sizeof f);f[1][1] = 1;queue<int> q1, q2;q1.push(1);q2.push(1);inq[1][1] = true;while (!q1.empty()) {int u1 = q1.front(), u2 = q2.front();q1.pop(); q2.pop();inq[u1][u2] = false;for (int i = 0; i < g1[u1].size(); i++) {int v1 = g1[u1][i];    int cand = f[u1][u2] + (v1 != u2);if (cand < f[v1][u2]) {f[v1][u2] = cand;if (!inq[v1][u2]) {q1.push(v1);q2.push(u2);inq[v1][u2] = true;}}}for (int i = 0; i < g2[u2].size(); i++) {int v2 = g2[u2][i];int cand = f[u1][u2] + (v2 != u1);if (cand < f[u1][v2]) {f[u1][v2] = cand;if (!inq[u1][v2]) {q1.push(u1);q2.push(v2);inq[u1][v2] = true;}}}if (u1 != u2 && f[u1][u2] + dis[u1][u2] - 1 < f[u2][u1]) {f[u2][u1] = f[u1][u2] + dis[u1][u2] - 1;if (!inq[u2][u1]) {q1.push(u2);q2.push(u1);inq[u2][u1] = true;}}}printf("Minimum number of nodes = %d\n", f[2][2]);} else {printf("Impossible\n");}printf("\n");}return 0;
}

View Code

转载于:https://www.cnblogs.com/HailJedi/p/9588256.html

UVa 1057 - Routing相关推荐

  1. UVa Online Judge 工具網站

    UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...

  2. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)

    1. simple 模式 simple 模式是最简单最常用的模式 2. work 模式 work 模式有多个消费者 消息产生者将消息放入队列.生产者系统不需知道哪一个任务执行系统在空闲,直接将任务扔到 ...

  3. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

  4. uva 401.Palindromes

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  6. UVA 11752 超级幂

    UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & ...

  7. UVa 11174 - Stand in a Line

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  8. UVa 10112 - Myacm Triangles

    UVa第一卷最后一题. 求内部不含点并且面积最大的三角形. 暴力. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #inclu ...

  9. 一步步学会使用ASP.NET 4 WEB应用程序中使用URL Routing(翻译)

    创建路由 路由就是将URL路径映射到具体的物理文件.若要将路由添加到网站中,请使用 RouteCollection.MapPageRoute 方法将它们添加到RouteTable类的静态Routes属 ...

最新文章

  1. rootkit 检测报告
  2. CentOS安装网卡设置
  3. 三个程序代码托管平台出现勒索事件? 建议启用多因素验证以保护账户
  4. .Net 编码以及与这些编码关联的代码页
  5. Linux常用命令集锦
  6. (选择 冒泡 插入 二分 异或)
  7. Spring Security 示例UserDetailsS​​ervice
  8. 带有服务器回调的通用客户端——服务器 DotNet远程处理
  9. python矩阵转置与zip(*)的使用
  10. 中国移动:2016年全力推NFC,以公共交通为突破口
  11. 单片机定时器实验两位倒计时秒表_Proteus入门单片机(3)例程分析
  12. Coin3D快速上手教程
  13. 简单理解-Head First 设计模式
  14. 判断是否是微信浏览器还是企业微信浏览器
  15. luogu 2735 电网 皮克公式
  16. mac 打开虚拟机之后,原MAC没有声音解决方法
  17. centos桌面系统怎么退回终端系统_CentOS下命令行和桌面模式的切换方法
  18. JSP WebSehll 后门脚本
  19. java毕业生设计在线答题系统计算机源码+系统+mysql+调试部署+lw
  20. 一个屌丝程序员的青春(四九)

热门文章

  1. MongoDB管理: 使用killOp干掉Long Running Operation
  2. 软考中项学习之路--在路上
  3. css3 使用SVG做0.5px 的边框细线
  4. 自定义mac的ll命令
  5. 一种隐蔽性较高的Java ConcurrentModificationException异常场景
  6. Photoshop 隐藏的快捷键
  7. 新IT运维时代 | Docker运维之最佳实践-下篇
  8. Memcache的部署和使用
  9. vue.js - advance - render 函数小抄
  10. 浅析主键自增长的优缺点