UVA 1599 Ideal Path (HDU 3760)
两次bfs;
第一次bfs逆向搜索,得到每个点到终点的最短距离,找出最短路;第二次bfs根据最短距离可以选择满足条件的最短路。
注意!碰到这种很大数据量的题目一定要记得用scanf,printf 输入输出!!!
ps:uva和hdu中数据输入有些出入。。。(uva中没有输入T。。。)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std; const int maxn=+;
const int inf=; struct node {
int u,v,w;
int next;
void init (int nu,int nv,int nw,int nnext){
u=nu;v=nv;w=nw;next=nnext;
}
}edges[maxn*]; int n,m,cnt;
int head[maxn],d[maxn],visit[maxn]; void addedges (int u,int v,int w){
edges[cnt].init (u,v,w,head[u]);
head[u]=cnt++;
} void anti_bfs (){
queue<int> q;
while (!q.empty ())
q.pop ();
q.push (n);
d[n]=;
while (!q.empty ()){
int u=q.front ();
q.pop ();
for (int i=head[u];i!=-;i=edges[i].next){
int v=edges[i].v;
if (d[v]==-){
d[v]=d[u]+;
q.push (v);
}
}
}
printf ("%d\n",d[]);//cout<<"error";
} void bfs (){
int p[maxn*];
int l,r;
l=r=;
p[r++]=;
visit[]=;
while (l<r){
int mi=inf;
for (int j=l;j<r;j++){
int u=p[j];
for (int i=head[u];i!=-;i=edges[i].next){
int v=edges[i].v;
//if (visit[v]) continue ;
if (d[u]==d[v]+)
mi=min (mi,edges[i].w);//cout<<edges[i].w<<"err"<<mi<<endl;
}
}
printf ("%d",mi);
int num=r;
for (int j=l;j<r;j++){
int u=p[j];
for (int i=head[u];i!=-;i=edges[i].next){
int v=edges[i].v;
if (visit[v]) continue ;
if (d[u]!=d[v]+)
continue ;
if (mi==edges[i].w){
p[num++]=v;
visit[v]=;//cout<<"error";
if (v==n){
printf ("\n");
return ;
}
}
}
}
printf (" ");
l=r;
r=num;
}
} int main (){
int t;
scanf ("%d",&t);
while (t--){
cnt=;
memset (head,-,sizeof head);
memset (d,-,sizeof d);
memset (visit,,sizeof visit);
scanf ("%d%d",&n,&m);
for (int i=;i<m;i++){
int a,b,c;
scanf ("%d%d%d",&a,&b,&c);
addedges (a,b,c);
addedges (b,a,c);
}
anti_bfs ();
bfs ();
}
return ;
}
UVA 1599 Ideal Path (HDU 3760)的更多相关文章
- 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
题意: 给出n和m,n代表有n个城市.接下来m行,分别给出a,b,c.代表a与b之间有一条颜色为c的道路.求最少走几条道路才能从1走到n.输出要走的道路数和颜色.保证颜色的字典序最小. 分析: bfs ...
- 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. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...
随机推荐
- php静态属性和静态方法
php静态属性和静态方法 2012-09-29 10:18 1518人阅读 评论(0) 收藏 举报 phpfunction 本php教程主要是学习php中静态属性和静态方法的使用方法和基本的示例. · ...
- re模块
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能 ...
- 在 .pro里加入 QMAKE_CXXFLAGS += /MP 将并行编译,加快编译速度(姚冬的办法)
但是只对VC编译器有效果. 另外还可以自己设置stdafx.h文件 http://www.zhihu.com/question/23045749
- spring3.0事务的配置
第一种配置方法:基于XML的事务管理 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,比如setXxx,xxxUpd ...
- Linux系统编程(24)——信号的生命周期
信号生命周期为从信号发送到信号处理函数的执行完毕. 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生:信号在进程中 ...
- Pascal's Triangle 解答
Question Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows ...
- 关于memcpy和memmove的一点说明
今天看到书上降到memcpy和memmove的区别才突然发现原来两者之间有如此区别,以前只知道这两个函数是 实现同样的功能,没有接触到其不同. memcpy和memmove在MSDN的定义如下: 从两 ...
- mongodb数据库备份恢复
MongoDB数据文件备份与恢复 备份与恢复数据对于管理任何数据存储系统来说都是非常重要的. 1.冷备份与恢复——创建数据文件的副本(前提是要停止MongoDB服务器),也就是直接copy ...
- static静态属性和静态方法的原理与调用技巧
这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属 ...
- 多点触控插件Hammer.js
插件描述:Hammer.js是一个开源的,轻量级的javascript库,它可以在不需要依赖其他东西的情况下识别触摸,鼠标事件. 使用方法: <script src=<span class ...