题目链接: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. PostgreSQL表空间

    postgres=# \h create tablespace Command: CREATE TABLESPACEDescription: define a new tablespaceSyntax ...

  2. UML:时序图

    时序图是用来描述对象的状态(或某数值)随时间变化而变化的图,一般软件开发中很少会用到. 灯有开和关两种状态,随着时间的推移,期间有人去开或者关这个灯,用时序图表示如下: 注意:蓝色和红色圈圈.黄色底色 ...

  3. 继承 Bean 配置

    继承 Bean 配置 Spring 允许继承 bean 的配置, 被继承的 bean 称为父 bean. 继承这个父 Bean 的 Bean 称为子 Bean子 Bean 从父 Bean 中继承配置, ...

  4. AHB中split机制简介

    完整的AHB协议:1)可以多个master,并且需要外加一个Arbiter,和write multiplexor.为了保证每一时刻只有一个master拥有访问权. 2)为了增强pipeline的能力, ...

  5. SQL Server安装完成后3个需要立即修改的配置选项(转载)

    你用安装向导安装了全新的SQL Server,最后你点击了完成按钮.哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的. 是的,你没看 ...

  6. java - Annotation元数据

    Annotation元数据(一) 一.Annotation究竟是什么? 是java5.0中的新特征 数据的数据(元数据) Annotation和访问修饰符一样,应用于包.类型.构造方法.方法.成员变量 ...

  7. linux 文件删除原理

    文件删除: i_link 文件的硬连接数 i_count 引用计数(有一个程序使用i_count加1) 文件删除的条件: i_link=0 and i_count=0 被进程占用的文件可以删除

  8. vsftp黑白名单设置及问题

    问题一:ftpusers和user_list两个文件各自的用途是什么?有何关系? 首先请明确一点:ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单!该文件存放的是一个禁止访问FTP的用 ...

  9. ThinkPHP 3.2.3的 R 方法

    R方法是可以调用其他的Controller中的方法, 例如 我想在Mit/DebugController.class.php中调用Foo/DoController.class.php中的share方法 ...

  10. centos7重启rsyslog服务|centos7重启syslog服务

    centos7重启rsyslog服务: systemctl restart rsyslog 使用:(killall无效) killall -HUP rsyslog