博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uva 1599 最佳路径
阅读量:5955 次
发布时间:2019-06-19

本文共 1334 字,大约阅读时间需要 4 分钟。

题目链接:

 

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

方法:

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

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

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

#include 
using namespace std;const int maxn = 100000 + 5;const int INF = 1000000000;struct Edge{ int u,v,c; Edge(int u=0,int v = 0,int c = 0) : u(u),v(v),c(c) {}};int n,m;vector
edges;vector
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-1);}int d[maxn];bool vis[maxn];vector
ans;void rev_bfs(){ memset(vis, 0, sizeof(vis)); d[n-1] = 0; vis[n-1] = true; queue
q; q.push(n-1); while(!q.empty()) { int u = q.front(); q.pop(); for(int i = 0; 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] + 1; q.push(v); } } }}void bfs(){ memset(vis,0,sizeof(vis)); vector
next; next.push_back(0); vector
ans; for(int i=0; i
next2; for(int j=0; j
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/6052685.html

你可能感兴趣的文章
Ubuntu Sub-process /usr/bin/dpkg
查看>>
详解DNS的常用记录(下):DNS系列之三
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
事情的两面性
查看>>
只要会营销,shi都能卖出去?
查看>>
sed单行处理命令奇偶行输出
查看>>
走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能
查看>>
VC++深入详解学习笔记1
查看>>
安装配置discuz
查看>>
CentOS7 64位小型操作系统的安装
查看>>
线程互互斥锁
查看>>
KVM虚拟机&openVSwitch杂记(1)
查看>>
win7下ActiveX注册错误0x80040200解决参考
查看>>
《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1-正确认识软件架构...
查看>>
2013 Linux领域年终盘点
查看>>
linux学习之查看程序端口占用情况
查看>>
相逢在栀枝花开的季节
查看>>
linux下git自动补全命令
查看>>
Ubuntu14.04LTS更新源
查看>>
Linux报“Unknown HZ value! (288) Assume 100”错误
查看>>