【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

逆向做一遍bfs.
得到终点到某个点的最短距离。
这样,我们从起点顺序的时候。
就能知道最短路的下一步是要走哪里了。
这样,我们从起点也开始做一遍bfs.
然后根据逆序的bfs得知下一步该往哪些点走。
每次优先走最小的字典序边即可。
多个最小的,就每个都走一遍试试。
6 6
1 2 3
1 3 3
2 4 5
3 5 1
4 6 1
5 6 100
ans = 3->1->100
↑↑这组数据可以hack网上好多人(>=1)的做法,数据里没有这组。
如果出现前一段路不是最小字典序了,就要结束这一段路了,不能继续往下走。
(或者,这样说,字典序最小的最短路不会到x这个节点来,那么就不能从x再继续往下走了)

【代码】

/*
1.Shoud it use long long ?
2.Have you ever test several sample(at least therr) yourself?
3.Can you promise that the solution is right? At least,the main ideal
4.use the puts("") or putchar() or printf and such things?
5.init the used array or any value?
6.use error MAX_VALUE?
*/
#include <bits/stdc++.h>
using namespace std; const int N = 1e5; int n,m,dis[N+10];
int vis[N+10];
vector < pair<int,int> > g[N+100];
queue <int> dl;
int a[N+10]; int main(){
#ifdef LOCAL_DEFINE
freopen("F:\\c++source\\rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0); while (cin >> n >> m){
memset(vis,0,sizeof vis);
for (int i = 1;i <= n+1;i++) a[i] = (int) 1e9+7;
for (int i = 1;i <= n;i++) g[i].clear();
for (int i = 1;i <= m;i++){
int x,y,z;
cin >>x>>y>>z;
g[x].push_back(make_pair(y,z));
g[y].push_back(make_pair(x,z));
} memset(dis,255,sizeof dis);
dis[n] = 0;
dl.push(n);
while (!dl.empty()){
int x = dl.front();
dl.pop();
for (int i = 0;i < (int)g[x].size();i++){
int y = g[x][i].first;
if (dis[y]==-1){
dis[y] = dis[x] + 1;
dl.push(y);
}
}
} vis[1] = 1;
dl.push(1);
while (!dl.empty()){
int x = dl.front();
dl.pop();
if (vis[x]>a[dis[x]+1]) continue; //vis[x]就是路径中到x的前一条边的最小权值,如果它不是前一条边的最小字典序就跳过 int mi = (int) 1e9 + 10;
for (int i = 0;i < (int) g[x].size();i++){
int y = g[x][i].first;
if (dis[y]==dis[x]-1){
mi = min(mi,g[x][i].second);
}
} a[dis[x]] = min(mi,a[dis[x]]);
for (int i = 0;i < (int) g[x].size();i++){
int y = g[x][i].first;
if (dis[y]==dis[x]-1 && g[x][i].second==mi){
if (!vis[y]) dl.push(y);
if(!vis[y] || vis[y]>mi) vis[y] = mi;
}
}
} cout << dis[1] << endl;
for (int i = dis[1];i >= 1;i--) {
cout << a[i];
if (i==1) cout << endl;else cout << ' ';
}
} return 0;
}

【例题 6-20 UVA - 1599】Ideal Path的更多相关文章

  1. UVA 1599 Ideal Path (HDU 3760)

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

  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(好题)——yhx

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

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

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

  5. UVA 1599 Ideal Path

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

  6. Uva 1599 Ideal Path - 双向BFS

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

  7. 【每日一题】 UVA - 1599 Ideal Path 字典序最短路

    题解:给一个1e5个点2e5条边,每个边有一个值,让你输出一条从1到n边的路径使得:条数最短的前提下字典序最小. 题解:bfs一次找最短路(因为权值都是1,不用dijkstra),再bfs一次存一下路 ...

  8. UVa 1599 Ideal Path (两次BFS)

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

  9. UVa 1599 Ideal Path【BFS】

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

随机推荐

  1. 在Ubuntu14.04中配置mysql远程连接教程

    上一篇文章,小编带大家学会了在Ubuntu14.04中安装MySQL,没有来得及上课的小伙伴们可以戳这篇文章:如何在Ubuntu14.04中安装mysql,今天给大家分享一下,如何简单的配置MySQL ...

  2. javaScript学习之正则表达式初探

    正则表达式    正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符 ...

  3. unzip---解压缩“.zip”压缩包。

    unzip命令用于解压缩由zip命令压缩的“.zip”压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新现有的文件: -l:显示压缩 ...

  4. WPF通用框架ZFS《项目结构介绍01》_模块介绍

    首页介绍: 下图为项目运行首页图片, 大的结构分为三块: 1.Header首部模块(存放通知组件[全局通知.消息管理 ].扩展模块[皮肤.系统设置.关于作者.退出系统]) 2.Left左侧菜单模块(存 ...

  5. 洛谷—— P2580 于是他错误的点名开始了

    https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次 ...

  6. Nginx模型 & 惊群问题

    这篇写的不错 http://www.cnblogs.com/linguoguo/p/5511293.html Nginx为啥性能高-多进程异步IO模型 1. 对于每个worker进程来说,独立的进程, ...

  7. 一次失败的PHP扩展开发之旅

    一次失败的PHP扩展开发之旅 By warezhou 2014.11.19 缘起 经过不断的持续迭代.我们部门的协程版网络框架(CoSvrFrame)最终出炉了!这本来是件喜大普奔的事情.可是随着新业 ...

  8. go channel实现

    go channel实现 Go语言经过多年的发展,于最近推出了第一个稳定版本.相对于C/C++来说,Go有很多独特之出,比如提供了相当抽象的工具,如channel和goroutine.本文主要介绍ch ...

  9. Spring--之旅

    spring的地位 如图可以看出,sping纵跨整个项目架构,它是一个容器框架.下面使用一个简单的项目来认识spring. 快速入门 step 1.新建一个普通Java工程,spring只是一种容器, ...

  10. 如何优雅的写UI——(6)内存泄漏

    控件讲了这么久,其实我的程序有两个Bug不知道大家有没有发现,这两个Bug都不会报错,对程序运行来说都没有阻碍,但是这种Bug对整个代码来说是一个很大的安全隐患. 什么是内存泄漏 内存泄漏(Memor ...