题目链接:https://uva.onlinejudge.org/external/15/1599.pdf

题意: 保证在最短路的时候,输出字典序最小的路径。

方法:

路径上有了权值,可以利用图论的数据结构来BFS,很方便。

逆序BFS,找到每个点距离终点的最短路长 d[x] ;

然后,从起点,沿着 d[u] = d[v] + 1; 的路径,分层BFS,选字典序最小的。找到那个最小字典序的节点之后,从新建队列。直到找完 d[0];

#include <bits/stdc++.h>
using namespace std; const int maxn = + ;
const int INF = ; struct Edge
{
int u,v,c;
Edge(int u=,int v = ,int c = ) : u(u),v(v),c(c) {}
}; int n,m;
vector<Edge> edges;
vector<int> G[maxn]; void AddEdge(int from,int to,int c)
{
edges.push_back(Edge(from,to,c));
int idx = edges.size();
G[from].push_back(idx-);
} int d[maxn];
bool vis[maxn];
vector<int> ans; void rev_bfs()
{
memset(vis, , sizeof(vis));
d[n-] = ;
vis[n-] = true; queue<int> q;
q.push(n-);
while(!q.empty())
{
int u = q.front();
q.pop();
for(int i = ; i < G[u].size(); i++)
{
Edge _edge = edges[G[u][i]];
int v = _edge.v;
if(!vis[v])
{
vis[v] = true;
d[v] = d[u] + ;
q.push(v);
}
}
}
} void bfs()
{
memset(vis,,sizeof(vis));
vector<int> next;
next.push_back();
vector<int> ans;
for(int i=; i<d[]; i++)
{
int min_color = INF; for(int j=; j<next.size(); j++) ///队列中一个级别的结点
{
int u = next[j]; for(int k=; k<G[u].size(); k++)
{
Edge _edge = edges[G[u][k]];
int v = _edge.v;
if(d[u]==d[v]+)
min_color = min(min_color,_edge.c);
} }
ans.push_back(min_color); vector<int> next2; for(int j=; j<next.size(); j++)
{
int u = next[j];
for(int k=; k<G[u].size(); k++)
{
Edge _edge = edges[G[u][k]];
int v = _edge.v;
if(d[u]==d[v]+&&vis[v]==false&&_edge.c==min_color)
{
vis[v] = ;
next2.push_back(v);
}
}
}
next = next2;
} printf("%d\n", ans.size());
printf("%d", ans[]);
for(int i = ; i < ans.size(); i++)
printf(" %d", ans[i]);
printf("\n"); } int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(d,,sizeof(d));
edges.clear();
for(int i=;i<n;i++)
G[i].clear();
for(int i=; i<m; i++)
{
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
u--;
v--;
AddEdge(u,v,c);
AddEdge(v,u,c);
}
rev_bfs();
bfs();
} return ;
}

Uva 1599 最佳路径的更多相关文章

  1. UVa 1599 理想路径(反向BFS 求最短路径 )

    题意: 给定一个有重边有自环的无向图,n个点(2 <= n <= 100000), m条边(1 <= m <= 200000), 每条边有一个权值, 求从第一个点到n的最少步数 ...

  2. ArcGIS 网络分析[1.2] 利用1.1的线shp创建网络数据集/并简单试验最佳路径

    上篇已经创建好了线数据(shp文件格式)链接:点我 这篇将基于此shp线数据创建网络数据集. 在此说明:shp数据的网络数据集仅支持单一线数据,也就是说基于shp文件的网络数据集,只能有一个shp线文 ...

  3. 使用 EOLINKER 进行接口测试的最佳路径 (下)

    本文为 <使用 EOLINKER 进行接口测试的最佳路径> 下半部分文章,主要介绍测试脚本如何执行和报告生成,以及测试项目人员如何协作.还没看过上篇文章请戳 使用 EOLINKER 进行接 ...

  4. 寻找最佳路径(ArcPy实现)

    一.背景 随着社会经济发展需求,公路的重要性日益提高.在一些交通欠发达的地区,公路建设迫在眉睫.如何根据实际地形情况设计出比较合理的公路规划,是一个值得研究的问题. 二.实验目的: (1)通过练习,熟 ...

  5. UVA 1599, POJ 3092 Ideal Path 理想路径 (逆向BFS跑层次图)

    大体思路是从终点反向做一次BFS得到一个层次图,然后从起点开始依次向更小的层跑,跑的时候选则字典序最小的,由于可能有多个满足条件的点,所以要把这层满足条件的点保存起来,在跑下一层.跑完一层就会得到这层 ...

  6. UVa 1599 (字典序最小的最短路) Ideal Path

    题意: 给出一个图(图中可能含平行边,可能含环),每条边有一个颜色标号.在从节点1到节点n的最短路的前提下,找到一条字典序最小的路径. 分析: 首先从节点n到节点1倒着BFS一次,算出每个节点到节点n ...

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

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

  8. UVA 1599 Ideal Path (HDU 3760)

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

  9. Uva 1599 Ideal Path - 双向BFS

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

随机推荐

  1. POJ 3241 Object Clustering(Manhattan MST)

    题目链接:http://poj.org/problem?id=3241 Description We have N (N ≤ 10000) objects, and wish to classify ...

  2. Android 播放视频文件

    package com.example.myvideo2; import java.io.File; import android.app.Activity; import android.net.U ...

  3. 夺命雷公狗---在js里阻止a标签的跳转和form表单的跳转

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  4. 夺命雷公狗---Thinkphp----14之前台的首页完善

    我们先来完成我们的首页部分,我们首页要先来完成到焊条部分和右侧的导航部分: 我们先来写控制器: 然后在右侧遍历头部遍历出我们所需要的数据: 因为我们的右侧是引入进来的,所以我们需要到右侧视图下进行遍历 ...

  5. ThinkPHP讲解(六)——添加数据

    添加数据到数据库有三种方式 第一种:使用数组添加 $model=D("Info"); //实例化对象 //添加数据的第一种方式:使用数组添加 //要添加的数组,必须是关联数组,ke ...

  6. 安装Debian的正确方法

    一.说明: Debian7.0.0的安装镜像文件有3个DVD,安装基本系统只用到第一个镜像文件,即DVD1 其它镜像文件是附带的软件包. 附Debian 7.0.0系统镜像下载地址: 32位:http ...

  7. 缓存方案之Redis

    Redis简介   Redis是Remote Dictionary Server(Redis) 的缩写,或许光听名字你就能猜出它大概是做什么的.不错,它是一个由Salvatore Sanfilippo ...

  8. android 学习随笔十九(对话框、样式、主题、国际化 )

    1.对话框 package com.itheima.dialog; import android.os.Bundle; import android.app.Activity; import andr ...

  9. Delphi XE的firemonkey获取当前文件所在路径的方法

    Delphi XE的firemonkey获取当前文件所在路径的方法 在之前,我们知道有三种方法: ExtractFilePath(ParamStr(0)) ExtractFilePath(Applic ...

  10. linux文件所属用户和组

    使用chown命令可以修改文件或目录所属的用户: 命令:chown 用户 目录或文件名 例如:chown -R qq /home/qq  (把home目录下的qq目录的拥有者改为qq用户) 使用chg ...