题意:

  给出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的更多相关文章

  1. UVA 1599 Ideal Path (HDU 3760)

    两次bfs: 第一次bfs逆向搜索,得到每个点到终点的最短距离,找出最短路:第二次bfs根据最短距离可以选择满足条件的最短路. 注意!碰到这种很大数据量的题目一定要记得用scanf,printf 输入 ...

  2. uva 1599 ideal path(好题)——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGYAAAODCAYAAAD+ZwdMAAAgAElEQVR4nOy9L8/0ypH/Pa8givGiyC

  3. UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)

    给一个n个点m条边(<=n<=,<=m<=)的无向图,每条边上都涂有一种颜色.求从结点1到结点n的一条路径,使得经过的边数尽量少,在此前提下,经过边的颜色序列的字典序最小.一对 ...

  4. Uva 1599 Ideal Path - 双向BFS

    题目连接和描述以后再补 这题思路很简单但还真没少折腾,前后修改提交了七八次才AC...(也说明自己有多菜了).. 注意问题: 1.看清楚原题的输入输出要求,刚了书上的中文题目直接开撸,以为输入输出都是 ...

  5. 【每日一题】 UVA - 1599 Ideal Path 字典序最短路

    题解:给一个1e5个点2e5条边,每个边有一个值,让你输出一条从1到n边的路径使得:条数最短的前提下字典序最小. 题解:bfs一次找最短路(因为权值都是1,不用dijkstra),再bfs一次存一下路 ...

  6. UVa 1599 Ideal Path (两次BFS)

    题意:给出n个点,m条边的无向图,每条边有一种颜色,求从结点1到结点n颜色字典序最小的最短路径. 析:首先这是一个最短路径问题,应该是BFS,因为要保证是路径最短,还要考虑字典序,感觉挺麻烦的,并不好 ...

  7. UVa 1599 Ideal Path【BFS】

    题意:给出n个点,m条边,每条边上涂有一个颜色,求从节点1到节点n的最短路径,如果最短路径有多条,要求经过的边上的颜色的字典序最小 紫书的思路:第一次从终点bfs,求出各个节点到终点的最短距离, 第二 ...

  8. UVA 1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)

    https://vjudge.net/problem/UVA-1599 给一个n个点m条边(2<=n<=100000,1<=m<=200000)的无向图,每条边上都涂有一种颜色 ...

  9. 【例题 6-20 UVA - 1599】Ideal Path

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 逆向做一遍bfs. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...

随机推荐

  1. C++编程规范和标准总结

    文件名: 每个源代码文件应该有一个包含文件.每个包含文件描述了单个类或者多个类相结合的集合.一般头文件(.h,或.hpp)包含类的定义而不是实例.因此包含文件可以用在多个文件当中,源文件(.c,.或c ...

  2. C#主要字典集合性能对比[转]

    A post I made a couple days ago about the side-effect of concurrency (the concurrent collections in ...

  3. 去掉firefox点击按钮时的虚线边框

    去掉火狐里面点击按钮时候的虚线边框 button::-moz-focus-inner, input[type="reset"]::-moz-focus-inner, input[t ...

  4. Android 启动Service服务和发送Broadcast广播的常用方法

    一.先说Service服务. 1.利用setAction()方法来指定启动的Service服务 Intent intent = new Intent(); intent.setAction(" ...

  5. VS2003,安装程序检测到另一个程序…

    昨天在安装Visual Studio .Net 2003时,出现一个对话框   "安装程序检测到另一个程序要求计算机重新启动.必须重新启动计算机后才能安装visual studio.net系 ...

  6. ios9基础知识(技能篇)

    NSFileManager.NSURL.NSFileHandle.NSData.NSXMLParser.NSUserDefaults.NSKeyedArchiver.NSKeyedUnarchiver ...

  7. jquery 综合使用例子

    效果如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  8. Windows下安装PHP扩展及资源下载地址(memcached为例)

    官方下载的php安装包ext目录里以经包含了常用的php扩展,但某些情况下并不能满足我们项目需求,比如memcache扩展就不在官方的php安装包里.这时就需要我们自己去下载安装. 本文列出php官方 ...

  9. 原生化:AnDevCon 2014 McVeigh 的主题演讲

    作者:Jeff McVeigh(Intel) 基于(至少部分)NDK的原生安卓应用程序占现在前1000 强的 60% 以上.该增长的原因很简单:开发商需要为用户提供超卓的体验(包括灵敏的反应.与丰富的 ...

  10. Naive Bayes(朴素贝叶斯算法)[分类算法]

    Naïve Bayes(朴素贝叶斯)分类算法的实现 (1) 简介: (2)   算法描述: (3) <?php /* *Naive Bayes朴素贝叶斯算法(分类算法的实现) */ /* *把. ...