UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)
给一个n个点m条边(<=n<=,<=m<=)的无向图,每条边上都涂有一种颜色。求从结点1到结点n的一条路径,使得经过的边数尽量少,在此前提下,经过边的颜色序列的字典序最小。一对结点间可能有多条边,一条边可能连接两个相同结点。输入保证结点1可以达到结点n。颜色为1~^9的整数。
第一次bfs逆向搜索,得到每个点到终点的最短距离,找出最短路;第二次bfs根据最短距离可以选择满足条件的最短路。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<bitset>
#include<map>
#include<vector>
#include<stdlib.h>
#include <stack>
using namespace std;
int dirx[]={,,-,};
int diry[]={-,,,};
#define PI acos(-1.0)
#define max(a,b) (a) > (b) ? (a) : (b)
#define min(a,b) (a) < (b) ? (a) : (b)
#define ll long long
#define eps 1e-10
#define MOD 1000000007
#define N 100006
#define inf 1e12
int n,m;
vector<int>G[N];
vector<int>C[N];
int dis[N];
int vis[N];
int ans[N];
void bfs1(){//得到每一点到终点的最短距离的模板
queue<int> q;
q.push(n);
dis[n]=;
while(!q.empty()){
int u=q.front();
q.pop(); for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(v==){
dis[v]=dis[u]+;
return;
}
if(dis[v]==-){
dis[v]=dis[u]+;
q.push(v);
}
}
}
}
void bfs2(){
queue<int> q;
q.push();
while(!q.empty()){
int u=q.front();
q.pop();
if(dis[u]==){
return;
}
int minn=-;
for(int i=;i<G[u].size();i++){
int v=G[u][i];
if(dis[v]==dis[u]-){
if(minn==-){
minn=C[u][i];
}
else{
minn=min(minn,C[u][i]);
}
}
} int t=dis[]-dis[u];
if(ans[t]==){
ans[t]=minn;
}
else{
ans[t]=min(ans[t],minn);
} for(int i=;i<G[u].size();i++){
int v=G[u][i]; if(vis[v]== && dis[v]==dis[u]- && C[u][i]==minn){
q.push(v);
vis[v]=;
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)==){
for(int i=;i<N;i++){
G[i].clear();
C[i].clear();
dis[i]=-;
vis[i]=;
ans[i]=;
}
for(int i=;i<m;i++){
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
G[x].push_back(y);
G[y].push_back(x);
C[x].push_back(c);//存 颜 色
C[y].push_back(c);
}
bfs1();//求 出 每 一 点 到 n 的 最 短 距 离
printf("%d\n",dis[]);
bfs2();//从 1开始找最短的路径 ,以及字典序最小
for(int i=;i<dis[];i++){
if(i){
printf(" ");
}
printf("%d",ans[i]);
}
printf("\n");
}
return ;
}
UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)的更多相关文章
- UVa 1599 Ideal Path (两次BFS)
		
题意:给出n个点,m条边的无向图,每条边有一种颜色,求从结点1到结点n颜色字典序最小的最短路径. 析:首先这是一个最短路径问题,应该是BFS,因为要保证是路径最短,还要考虑字典序,感觉挺麻烦的,并不好 ...
 - Uva 1599 Ideal Path - 双向BFS
		
题目连接和描述以后再补 这题思路很简单但还真没少折腾,前后修改提交了七八次才AC...(也说明自己有多菜了).. 注意问题: 1.看清楚原题的输入输出要求,刚了书上的中文题目直接开撸,以为输入输出都是 ...
 - UVA 1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
		
https://vjudge.net/problem/UVA-1599 给一个n个点m条边(2<=n<=100000,1<=m<=200000)的无向图,每条边上都涂有一种颜色 ...
 - UVa 1599 Ideal Path【BFS】
		
题意:给出n个点,m条边,每条边上涂有一个颜色,求从节点1到节点n的最短路径,如果最短路径有多条,要求经过的边上的颜色的字典序最小 紫书的思路:第一次从终点bfs,求出各个节点到终点的最短距离, 第二 ...
 - UVA 1599 Ideal Path
		
题意: 给出n和m,n代表有n个城市.接下来m行,分别给出a,b,c.代表a与b之间有一条颜色为c的道路.求最少走几条道路才能从1走到n.输出要走的道路数和颜色.保证颜色的字典序最小. 分析: bfs ...
 - UVA 1599 Ideal Path (HDU 3760)
		
两次bfs: 第一次bfs逆向搜索,得到每个点到终点的最短距离,找出最短路:第二次bfs根据最短距离可以选择满足条件的最短路. 注意!碰到这种很大数据量的题目一定要记得用scanf,printf 输入 ...
 - 【每日一题】 UVA - 1599 Ideal Path 字典序最短路
		
题解:给一个1e5个点2e5条边,每个边有一个值,让你输出一条从1到n边的路径使得:条数最短的前提下字典序最小. 题解:bfs一次找最短路(因为权值都是1,不用dijkstra),再bfs一次存一下路 ...
 - uva 1599 ideal path(好题)——yhx
		
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGYAAAODCAYAAAD+ZwdMAAAgAElEQVR4nOy9L8/0ypH/Pa8givGiyC
 - UVA 1599,  POJ 3092 Ideal Path 理想路径 (逆向BFS跑层次图)
		
大体思路是从终点反向做一次BFS得到一个层次图,然后从起点开始依次向更小的层跑,跑的时候选则字典序最小的,由于可能有多个满足条件的点,所以要把这层满足条件的点保存起来,在跑下一层.跑完一层就会得到这层 ...
 
随机推荐
- POJ 1065 Wooden Sticks / hdu 1257 最少拦截系统  DP 贪心
			
参考链接:http://blog.csdn.net/xiaohuan1991/article/details/6956629 (HDU 1257 解题思路一样就不继续讲解) POJ 1065题意:给你 ...
 - php5.3 appache phpstudy win7win8win10下 运行速度慢
			
php5.3 appache phpstudy win7win8win10下 运行速度慢 最近在部署服务器以及本地测试的时候发现了一个奇怪的现象,运行PHP程序的时候非常慢,起先以为是网速的原因,后经 ...
 - MyWidget【简单自制控件】
			
#coding=gbk from PyQt4 import QtGui,QtCore import random class MyWidget(QtGui.QWidget): def __init__ ...
 - RESTEasy 3.X Helloworld
			
最近呢,RESTEasy也升级了.升到了3.X. 官网:http://www.jboss.org/resteasy 集成使用也非常简单(相比SOAP而言) 第一步:下载jar包 resteasy是托管 ...
 - DOS 选择跳转实现、dos + bcp 双击导入和导出数据
			
DOS 选择跳转实现.dos + bcp 双击导入和导出数据 option.bat @echo off :Start2 cls goto Start :Start title Frequently U ...
 - Cordova for android怎样在App中处理退出button事件
			
项目须要在HTML5 Android App中增加对返回键的处理,发现直接在Activity中加返回键处理代码不起作用,分析cordova源代码发现返回键已经被WebView处理掉了,所以仅仅能在js ...
 - DE2带的IP核ISP12362报错问题解决  Error:avalon_slave_1_irq: associatedAddressablePoint out of range
			
问题来源与对友晶提供的ISP1362 IP核的使用,由于Quartus II版本问题,它提供的IP基于7.0版本,而我用的版本为11.1,在SOPC Builder中重新加载IP,就出现了上述的错误报 ...
 - 调试Linq的时候获得相对应的SQL
			
(query as System.Data.Objects.ObjectQuery).ToTraceString()
 - CSS减肥的工具–Firefox插件 CSS Usage
			
首先,我们需要安装Firefox(猛击此处下载),或者确定你已经安装的版本已经高于3.1; 第二步,安装前端开发人员最普及的开发工具 Firebug: 第三步,安装CSS Usage 0.3.4.1: ...
 - 在asp.net中导出表格Excel数据
			
第一步:需要引用org.in2bits.MyXls程序集到使用页面 第二步:前台代码 <asp:Button ID="LeadingOut" runat="serv ...