HDOJ 2923 Einbahnstrasse (Floyed)
2016-02-05 19:55
190 查看
点击打开链接
题意:
给定n个城市,c个目的地(由于n最大是100,c最大为1000,所以可能有重复),r条有向边。
接下来是出发点,然后是c个目的地。
接下来r行是路径的信息,箭头代表方向。
求每次从出发点出发到达目的地,然后再回到起点。走c个来回的最短路之和。
因为c个目的地可能有重复,所以在加到map中去的时候不能重复计数,要判重,但是最后算最短路的时候重复几次就要算几次。
注意重边的判断。
此题n最大为100,所以虽然是单源最短路,还是可以用Floyed,代码打起来方便。
题意:
给定n个城市,c个目的地(由于n最大是100,c最大为1000,所以可能有重复),r条有向边。
接下来是出发点,然后是c个目的地。
接下来r行是路径的信息,箭头代表方向。
求每次从出发点出发到达目的地,然后再回到起点。走c个来回的最短路之和。
因为c个目的地可能有重复,所以在加到map中去的时候不能重复计数,要判重,但是最后算最短路的时候重复几次就要算几次。
注意重边的判断。
此题n最大为100,所以虽然是单源最短路,还是可以用Floyed,代码打起来方便。
#include<cstdio> #include<cstring> #include<map> #include<iostream> #include<string> const int INF = 0x3f3f3f3f; const int VN = 105; int a[VN][VN]; using namespace std; string st[1005]; int main() { map <string,int> name; int sum, cnt, b, e, n, c, r, l, ans, s, ch; string sv, sb, sd, se; sum = 0; while (~scanf("%d%d%d", &n, &c, &r) && !(n == 0 && c == 0 && r == 0)) { sum++; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) a[i][j] = INF; for (int i = 1; i <= n; i++) a[i][i] = 0; name.clear(); cin >> sv; cnt = 1; name[sv] = cnt; for (int i = 1; i <= c; i++) { cin >> st[i]; if (name.find(st[i]) == name.end()) { cnt++; name[st[i]] = cnt; } } for (int i = 1; i <= r; i++) { cin >> sb >> sd >> se; if (name.find(sb) == name.end()) { cnt++; name[sb] = cnt; } if (name.find(se) == name.end()) { cnt++; name[se] = cnt; } l = sd.size(); s = 0; for (int j = 0; j < l; j++) if (sd[j] >= '0' && sd[j] <= '9') { ch = sd[j] - '0'; s = s*10 + ch; } b = name[sb]; e = name[se]; if (sd[0] == '<' && s < a[e][b]) a[e][b] = s; if (sd[l-1] == '>' && s < a[b][e]) a[b][e] = s; } for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (a[i][k] != INF && a[k][j] != INF && a[i][k] + a[k][j] < a[i][j]) a[i][j] = a[i][k] + a[k][j]; ans = 0; for (int i = 1; i <= c; i++) ans += a[name[sv]][name[st[i]]]+a[name[st[i]]][name[sv]]; printf("%d. %d\n", sum, ans); } return 0; }
相关文章推荐
- Log4Net中配置文件的解释
- 手机端和电脑端判断代码
- Chrome for Mac键盘快捷键
- 软件三层设计入门-表单校验,购物车
- 好用的截图方法
- Android Material Design 详解(使用support v7兼容5.0以下系统(部分功能))
- Mybatis与Spring整合
- vSphere中CPU的设置选择及运行流程
- Priest John's Busiest Day
- WM_PAINT消息在窗口重绘的时候产生,那什么时候窗口会重绘(异步工作方式,效率更高,灵活性更强)
- 最近d语言写的比较凌乱
- 快速幂
- 【URAL 刷题记】URAL 1028 ~ URAL 1035
- js字符串方法(总结)
- Windows 10 暗藏神秘 Linux 子系统!
- 【HDU 5007】Post Robot
- h5宣传页制作过程中遇到的问题
- memset用法详解(转)
- [Spring实战系列](11)SpEL使用表达式装配
- 通过Maven搭建Mybatis项目