题解:给一个1e5个点2e5条边,每个边有一个值,让你输出一条从1到n边的路径使得:条数最短的前提下字典序最小。

题解:bfs一次找最短路(因为权值都是1,不用dijkstra),再bfs一次存一下路径,4个月前的代码(忘了为什么搞得那么麻烦),wa了两天,今天看了一下题目,看了一下代码,改了一下初始化数组,直接过了orz

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<cstring>
  3. #include<cctype>
  4. #include<cmath>
  5. #include<cstdio>
  6. #include<string>
  7. #include<stack>
  8. #include<list>
  9. #include<set>
  10. #include<map>
  11. #include<queue>
  12. #include<vector>
  13. #include<sstream>
  14. #include<iostream>
  15. #include<algorithm>
  16. //std::ios::sync_with_stdio(false);
  17. using namespace std;
  18. const int maxn = 2e5 + ;
  19. vector<pair<int, int> >E[maxn];
  20. int d[maxn];
  21. int n, m;
  22. void bfs(int n) {
  23. queue<int> Q;
  24. Q.push(n); d[n] = ;
  25. while (!Q.empty()) {
  26. int now = Q.front(); Q.pop();
  27. for (int i = ; i < E[now].size(); i++) {
  28. int v = E[now][i].first;
  29. if (d[v])continue;
  30. d[v] = d[now] + ;
  31. Q.push(v);
  32. }
  33. }
  34. }
  35. int ans[maxn];
  36. int vis[maxn];
  37. void bfs1() {
  38. for (int i = ; i <= n; i++)ans[i] = 1e9+;
  39. queue<int>Q;
  40. Q.push();
  41. while (!Q.empty()) {
  42.  
  43. int now = Q.front(); Q.pop();
  44. if (vis[now])continue;
  45. vis[now] = ;
  46. int mn = 1e9 + ;
  47. for (int i = ; i < E[now].size(); i++) {
  48. int v = E[now][i].first;
  49. if (d[v] != d[now] - )continue;
  50. int w = E[now][i].second;
  51. mn = min(mn, w);
  52. }
  53. int diff = d[] - d[now];
  54. ans[diff] = min(ans[diff], mn);
  55. for (int i = ; i < E[now].size(); i++) {
  56. int v = E[now][i].first;
  57. if (d[v] != d[now] - )continue;
  58. int w = E[now][i].second;
  59. if (w == mn) Q.push(v);
  60.  
  61. }
  62.  
  63. }
  64. }
  65. void init() {
  66. memset(ans, , sizeof(ans));
  67. memset(vis, , sizeof(vis));
  68. memset(d, , sizeof(d));
  69. for (int i = ; i <= n; i++)E[i].clear();
  70. }
  71. int main() {
  72. while (cin >> n >> m) {
  73. init();
  74. for (int i = ; i <= m; i++) {
  75. int x, y, z;
  76. scanf("%d%d%d", &x, &y, &z);
  77. E[x].push_back(make_pair(y, z));
  78. E[y].push_back(make_pair(x, z));
  79. }
  80. bfs(n);
  81. bfs1();
  82. cout << d[] - << endl;
  83. for (int i = ; i < d[] - ; i++)printf("%d%c", ans[i], i + == d[] - ? '\n' : ' ');// << ' ';|
  84.  
  85. }
  86. //system("pause");
  87. return ;
  88. }
  89. /*
  90.  
  91. 4 6
  92. 1 2 1
  93. 1 3 2
  94. 3 4 3
  95. 2 3 1
  96. 2 4 4
  97. 3 1 1
  98.  
  99. */

【每日一题】 UVA - 1599 Ideal Path 字典序最短路的更多相关文章

  1. uva 1599 ideal path(好题)——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGYAAAODCAYAAAD+ZwdMAAAgAElEQVR4nOy9L8/0ypH/Pa8givGiyC

  2. UVA 1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)

    https://vjudge.net/problem/UVA-1599 给一个n个点m条边(2<=n<=100000,1<=m<=200000)的无向图,每条边上都涂有一种颜色 ...

  3. Uva 1599 Ideal Path - 双向BFS

    题目连接和描述以后再补 这题思路很简单但还真没少折腾,前后修改提交了七八次才AC...(也说明自己有多菜了).. 注意问题: 1.看清楚原题的输入输出要求,刚了书上的中文题目直接开撸,以为输入输出都是 ...

  4. UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)

    给一个n个点m条边(<=n<=,<=m<=)的无向图,每条边上都涂有一种颜色.求从结点1到结点n的一条路径,使得经过的边数尽量少,在此前提下,经过边的颜色序列的字典序最小.一对 ...

  5. UVA 1599 Ideal Path (HDU 3760)

    两次bfs: 第一次bfs逆向搜索,得到每个点到终点的最短距离,找出最短路:第二次bfs根据最短距离可以选择满足条件的最短路. 注意!碰到这种很大数据量的题目一定要记得用scanf,printf 输入 ...

  6. UVA 1599 Ideal Path

    题意: 给出n和m,n代表有n个城市.接下来m行,分别给出a,b,c.代表a与b之间有一条颜色为c的道路.求最少走几条道路才能从1走到n.输出要走的道路数和颜色.保证颜色的字典序最小. 分析: bfs ...

  7. UVa 1599 Ideal Path (两次BFS)

    题意:给出n个点,m条边的无向图,每条边有一种颜色,求从结点1到结点n颜色字典序最小的最短路径. 析:首先这是一个最短路径问题,应该是BFS,因为要保证是路径最短,还要考虑字典序,感觉挺麻烦的,并不好 ...

  8. UVa 1599 Ideal Path【BFS】

    题意:给出n个点,m条边,每条边上涂有一个颜色,求从节点1到节点n的最短路径,如果最短路径有多条,要求经过的边上的颜色的字典序最小 紫书的思路:第一次从终点bfs,求出各个节点到终点的最短距离, 第二 ...

  9. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

随机推荐

  1. 十大高明的Google搜索技巧

    WHY 对于google检索,有时需要技巧会得到更好的检索结果,不用简单输入关键字检索后,一个个去浏览.对于这些技巧,基本都知道,但是如果不经常用,总是忘了,又得重新搜索下具体使用方法,这里就把它放到 ...

  2. 登录tomcat服务器首页直接跳转到项目

    原文:https://www.cnblogs.com/xwdreamer/p/3489996.html 需求: 客户觉得每次输入http://10.138.16.232:8080/abc/ 比较烦,他 ...

  3. c++ 出现“ error LNK2019: 无法解析的外部符号 该符号在函数 中被引用"错误原因

    一般问题出在 (1)XXX.lib头文件,这个要包含(不然编译也不能通过) (2)需要XXX.lib或XXX.dll库.手动添加,项目->属性->配置属性->链接器->输入 然 ...

  4. CAP原理中的一致性

    CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...

  5. recyclerView插入(add)和删除(remove)item后,item错乱,重复,覆盖在原recyclerView上

    项目用到,实现一个recyclerView列表的item翻转动效,翻转的同时会将指定item置顶. (比如交换AB位置,A在0位置,指定的item B 在 i 位置) 原始使用的是插入B到0位置,然后 ...

  6. JavaScript高级用法三之浏览器对象

    综述 本篇的主要内容来自慕课网,内置对象,主要内容如下 1 window对象 2 JavaScript 计时器 3 计时器setInterval() 4 取消计时器clearInterval() 5 ...

  7. 【转】Winform程序未捕获异常解决方法 EventType clr20r3 P1

    from:http://blog.csdn.net/chichaodechao/article/details/8294922 在开发winform程序时,用到多线程,在服务器部署后运行,老是自动关才 ...

  8. Android wpa_supplicant 四次握手 流程分析

    记录wpa_supplicant四次握手的过程. 相关log:https://www.cnblogs.com/helloworldtoyou/p/9633603.html 接收到第一次握手,会设置一个 ...

  9. Java如何获取本地计算机的IP地址和主机名?

    在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com. ...

  10. jQuery移除或禁用html元素点击事件常用方法小结

    移除或禁用html元素的点击事件可以通过css实现也可以通过js或jQuery实现. 一.CSS方法 .disabled { pointer-events: none; } 二.jQuery方法 方法 ...