字典序最小的最短路
来源:互联网 发布:ecshop支持的php版本 编辑:程序博客网 时间:2024/05/11 05:25
问题描述:
给出n和m,有n个点,m条双向边,1为起点,n为终点,每条边都有一个权值,经过每一条边的时间都为1,求从起点到终点既要时间最少,又要权值组成的序列的字典序最小的一条路径.
输入样例:
4 6
1 2 1
1 3 2
3 4 3
2 3 1
2 4 4
3 1 1
输出样例:
2
1 3
限制范围:
50%,n<=100
100%,n<=100000,m<=200000
分析:
又是一道双关键字限制结果最优性的问题,此类问题一般思路就是枚举一个,计算最优另一个。
对于这道题,我们可以先用SPFA算出从终点开始到每个点的距离,然后从起点开始,每一步都选择权值最小的即可。其实也不是很复杂。
参考程序:
#include<cstdio>#include<algorithm>#include<set>#include<queue>#include<cstring>using namespace std;const int maxn=610000;const int INF=0x3f3f3f3f;struct Edge{int j,v,next;}e[maxn];int EdgeCnt=0;int d[maxn],a[maxn];bool inq[maxn];queue<int> Q;int n,m;void addedge(int u,int v,int w){int p=++EdgeCnt;e[p].j=v;e[p].v=w;e[p].next=a[u];a[u]=p;}int main(){freopen("ideal.in","r",stdin);freopen("ideal.out","w",stdout);scanf("%d%d",&n,&m);for (int i=0;i<m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);addedge(u,v,w);addedge(v,u,w);}memset(d,0x3f,sizeof(d));Q.push(n);inq[n]=true;d[n]=0;while (!Q.empty()){int u=Q.front();Q.pop();for (int p=a[u];p;p=e[p].next){int j=e[p].j;if (d[j]>d[u]+1){d[j]=d[u]+1;if (!inq[j]){inq[j]=true;Q.push(j);}}}inq[u]=false;}printf("%d\n",d[1]);set<int> now,next;now.insert(1);for (int dist=d[1]-1;dist>=0;dist--){int col=INF;for (set<int>::iterator u=now.begin();u!=now.end();u++){for (int p=a[*u];p;p=e[p].next){int j=e[p].j,v=e[p].v;if (d[j]==dist && v<=col){if (v<col){ col=v; next.clear(); next.insert(j); }else if (next.find(j)==next.end())next.insert(j);}}}printf("%d ",col);now=next;next.clear();}return 0;}
0 0
- 字典序最小的最短路
- HDU1385 【输出字典序最小的最短路】
- hdoj 1385 输出 最短路的最小字典序路径
- hdu 3760 Ideal Path 字典序最小的最短路
- HDU 3760 Ideal Path 最短路spfa+BFS 字典序最小的最短路
- hdu_1385 逆向SPFA求字典序最小最短路
- poj 3967 Ideal Path 字典序最小最短路
- Ideal Path,uva1599/hdu 3760(最短路中字典序最小的路径)
- HDU 5335 Walk Out(Bfs搜索字典序最小的最短路)
- Minimum Transport Cost hdu 点权和边权的最短路+输出字典序最小的路径
- hdu 1385 Minimum Transport Cost 最短路 + 打印字典序最小路径
- UVA 10537 The Toll! Revisited(最短路变形+输出字典序最小路径)
- uva 10537 - The Toll! Revisited (逆向思维+最短路+输出字典序最小路径)
- hdu 1385 Minimum Transport Cost(最短路 + 字典序最小路径)
- HDU - 1385 Minimum Transport Cost(最短路+最小字典序路径)
- 最短路+字典序最小+输出路径(Ideal Path,UVA 1599)
- hdu3870 基于最短路的最小割
- HDU 1385 Minimum Transport Cost 最短路+字典序
- RedHat Linux7如何修改开机默认运行target级别
- Maven 原理
- Leetcode6: ZigZag Conversion
- 通过 itms:services://? 在线安装ipa ,跨过app-store
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- 字典序最小的最短路
- 防御式编程
- linux好用的软件1
- android studio中取消关联git
- 程序员如何防止脑疲劳:下午补充一些干果
- 2016-11-8
- Android屏幕适配全攻略(最权威的官方适配指导)
- 在Redhat linux7下安装oracle数据库在./runinstall时老是提示Can't connect to X11 window server。。。
- C# 16进制与字符串、字节数组之间的转换