UVA 1599 Ideal Path
题意:
给出n和m,n代表有n个城市。接下来m行,分别给出a,b,c。代表a与b之间有一条颜色为c的道路。求最少走几条道路才能从1走到n。输出要走的道路数和颜色.保证颜色的字典序最小。
分析:
bfs,先倒搜一次,求出每个点到终点的距离d[i]。然后从起点走,每次走到新点保证d-1且颜色最小。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 100010;
vector<int>g[maxn];
vector<int>c[maxn];
int step[maxn];
int ans[maxn<<1];
int vis[maxn];
int flag;
void bfs1(int n)
{
queue<int>q;
step[n]=0;
q.push(n);
while(!q.empty())
{
int u=q.front();
q.pop();
int sz=g[u].size();
for(int v=0;v<sz;v++)
{
int vv=g[u][v];
if(vv==1)
{
step[1]=step[u]+1;
return;
}
if(step[vv]==-1)
{
step[vv]=step[u]+1;
q.push(vv);
}
}
}
return;
}
void bfs2()
{
memset(vis,0,sizeof(vis));
queue<int>q;
q.push(1);
while(!q.empty())
{
int u=q.front();
q.pop();
if(step[u]==0)
return;
int sz=g[u].size();
int ff=0;
int min_=-1;
for(int i=0;i<sz;i++)
{
int vv=g[u][i];
if(step[vv]==step[u]-1)
{
if(min_==-1)
min_=c[u][i];
else
min_=min(min_,c[u][i]);
}
}
int tt=step[1]-step[u];
if(ans[tt]==0)
ans[tt]=min_;
else
ans[tt]=min(min_,ans[tt]);
for(int v=0;v<sz;v++)
{
int vv=g[u][v];
if(vis[vv]==0&&step[vv]==step[u]-1&&c[u][v]==min_)
{
q.push(vv);
vis[vv]=1;
}
}
}
return;
}
int main()
{
int n,m;
int a,b,c1;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j;
for(i=0;i<maxn;i++)
g[i].clear();
for(i=0;i<maxn;i++)
c[i].clear();
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c1);
if(a==b)
continue;
g[a].push_back(b);
g[b].push_back(a);
c[a].push_back(c1);
c[b].push_back(c1);
}
memset(step,-1,sizeof(step));
memset(ans,0,sizeof(ans));
step[n]=-1;
bfs1(n);
//cout<<step[1]<<endl;
bfs2();
printf("%d\n",step[1]);
for(i=0;i<step[1];i++)
{
if(i)
printf(" ");
printf("%d",ans[i]);
}
printf("\n");
}
}
UVA 1599 Ideal Path的更多相关文章
- UVA 1599 Ideal Path (HDU 3760)
两次bfs: 第一次bfs逆向搜索,得到每个点到终点的最短距离,找出最短路:第二次bfs根据最短距离可以选择满足条件的最短路. 注意!碰到这种很大数据量的题目一定要记得用scanf,printf 输入 ...
- uva 1599 ideal path(好题)——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGYAAAODCAYAAAD+ZwdMAAAgAElEQVR4nOy9L8/0ypH/Pa8givGiyC
- UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)
给一个n个点m条边(<=n<=,<=m<=)的无向图,每条边上都涂有一种颜色.求从结点1到结点n的一条路径,使得经过的边数尽量少,在此前提下,经过边的颜色序列的字典序最小.一对 ...
- Uva 1599 Ideal Path - 双向BFS
题目连接和描述以后再补 这题思路很简单但还真没少折腾,前后修改提交了七八次才AC...(也说明自己有多菜了).. 注意问题: 1.看清楚原题的输入输出要求,刚了书上的中文题目直接开撸,以为输入输出都是 ...
- 【每日一题】 UVA - 1599 Ideal Path 字典序最短路
题解:给一个1e5个点2e5条边,每个边有一个值,让你输出一条从1到n边的路径使得:条数最短的前提下字典序最小. 题解:bfs一次找最短路(因为权值都是1,不用dijkstra),再bfs一次存一下路 ...
- UVa 1599 Ideal Path (两次BFS)
题意:给出n个点,m条边的无向图,每条边有一种颜色,求从结点1到结点n颜色字典序最小的最短路径. 析:首先这是一个最短路径问题,应该是BFS,因为要保证是路径最短,还要考虑字典序,感觉挺麻烦的,并不好 ...
- UVa 1599 Ideal Path【BFS】
题意:给出n个点,m条边,每条边上涂有一个颜色,求从节点1到节点n的最短路径,如果最短路径有多条,要求经过的边上的颜色的字典序最小 紫书的思路:第一次从终点bfs,求出各个节点到终点的最短距离, 第二 ...
- UVA 1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
https://vjudge.net/problem/UVA-1599 给一个n个点m条边(2<=n<=100000,1<=m<=200000)的无向图,每条边上都涂有一种颜色 ...
- 【例题 6-20 UVA - 1599】Ideal Path
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 逆向做一遍bfs. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...
随机推荐
- 基于纹理边缘抑制的轮廓和边界检测(Contour and Boundary Detection)
基于纹理边缘抑制的轮廓和边界检测(Contour and Boundary Detection) kezunhai@gmail.com http://blog.csdn.net/kezunhai 一幅 ...
- Android应用程序与SurfaceFlinger服务的关系概述和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/7846923 SurfaceFlinger服务负 ...
- STL源代码剖析 读书总结
<<STL源代码剖析>> 侯捷著 非常早就买了这本书, 一直没看, 如今在实验室师兄代码的时候发现里面使用了大量泛型编程的内容, 让我有了先看看这本书的想法. 看之前我对于泛型 ...
- 《JavaScript 闯关记》之表达式和运算符
表达式 表达式是由数字.运算符.数字分组符号(如括号).自由变量和约束变量等以能求得数值的有意义排列方法所得的组合.JavaScript 表达式主要有以下几种形式: 原始表达式:常量.变量.保留字. ...
- AppSettings
1.winform中读写配置文件appSettings 一节中的配置. #region 读写配置文件 /// <summary> /// 修改配置文件中某项的值 /// </summ ...
- django的路由系统
在django生成的工程项目文件中urls.py文件用于指定路由信息 该文件默认导入以下模块 from confimport from import admin from confimport url ...
- DEVC++生成DLL的方法
通过网上一个MD5加密算法源码生成DLL 一.建立DLL项目并编译 DEVC++创建C项目,选择DLL, 一共4个文件及源码如下: dll.h dllmain.c md5.c md5.h 函数参数: ...
- jsp基础之 jstl
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这些,它还提供 ...
- Can someone explain Webpack's CommonsChunkPlugin
I get the general gist that the CommonsChunkPlugin looks at all the entry points, checks to see if t ...
- sql server数据库实现保留指定位数小数的函数
有时候需要对一个特定的含有小数点的数字保留指定位数,比如"123.123600". 在数据库中以函数的形式实现如下: USE [数据库名称] GO /****** Object: ...