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. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...
随机推荐
- vi/vim经常使用命令
工作模式 插入命令 a 在光标后附加文本 A 在本行行尾附加文本 i 在光标前插入 I 在本行行首插入文本 o 在光标以下插入新的一行 O 在光标上面插入新的一行 定位命令 h 左移一个字符/ 向左的 ...
- HA高可用的搭建
HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务. 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务.常用 ...
- uploadify按钮中文乱码问题
uploadify是一款基于jQuery库的上传插件,但很可惜的是无论你怎么设置参数buttonText ,它的中文按钮都会出现乱码的情况,现把出现原因及解决方法总结如下. 那么出现这种的 ...
- XMLHttpRequest Level 2 使用指南
XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信. 最早,微软在IE 5引进了这个接口.因为它太有用,其他浏览器也模仿部署了,ajax操作因此得以诞生. ...
- bach cello
http://bachlb.blog.163.com/blog/static/1819105120073275251223 一个偶然的机会,卡萨尔斯的父亲来巴塞罗那看卡萨尔斯,并且一起去逛了一间海边的 ...
- H-Index,H-Index II
1.H-Index Total Accepted: 19058 Total Submissions: 70245 Difficulty: Medium Given an array of citati ...
- node.js中favicon.ico请求两次问题
var http=require("http"); var server=http.createServer(); server.on("request",fu ...
- 轻松搞定Ajax(分享下自己封装ajax函数,其实Ajax使用很简单,难是难在你得到数据后来怎样去使用这些数据)
hey,guys!今天我们一起讨论下ajax吧!此文只适合有一定ajax基础,但还是模糊状态的同志,当然高手也可以略过~~~ 一.概念 Ajax(Asynchronous Javascript + X ...
- yii2不用composer使用redis
1.下载redis https://github.com/yiisoft/yii2-redis 2.下载解压放到 basic\vendor\yiisoft\yii2-redis 3.编辑文件: bas ...
- python运维开发(十一)----python操作缓存memcache、redis
内容目录: 缓存 memcache redis memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数 ...