UVa 1599 Ideal Path【BFS】
题意:给出n个点,m条边,每条边上涂有一个颜色,求从节点1到节点n的最短路径,如果最短路径有多条,要求经过的边上的颜色的字典序最小
紫书的思路:第一次从终点bfs,求出各个节点到终点的最短距离,
第二次bfs从起点沿着每到达一个节点d[]减少1来走,按照颜色的字典序最小的路径来走
#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = ;
const int mod=;
const int maxn=; struct Edge{
int u,v,c;
Edge(int u=,int v=,int c=):u(u),v(v),c(c){}
}; vector<Edge> edges;
vector<int> G[maxn]; void addedges(int u,int v,int c){
edges.push_back(Edge(u,v,c));
int idx=edges.size()-;
G[u].push_back(idx);
} int n,vis[maxn],d[maxn]; void rev_bfs(){//求出每一个节点到终点n-1的距离
memset(vis,,sizeof(vis));
vis[n-]=true;
d[n-]=; queue<int> q;
q.push(n-);
while(!q.empty()){
int v=q.front();q.pop();
for(int i=;i<G[v].size();i++){
int e=G[v][i];
int u=edges[e].v;
if(!vis[u]){
vis[u]=true;
d[u]=d[v]+;
q.push(u);
}
}
}
} vector<int> ans; void bfs(){
memset(vis,,sizeof(vis));
vis[]=true;
ans.clear(); vector<int> next;
next.push_back(); for(int i=;i<d[];i++){
int min_color=INF;
for(int j=;j<next.size();j++){
int u=next[j];
for(int k=;k<G[u].size();k++){
int e=G[u][k];
int v=edges[e].v;
if(d[u]==d[v]+)
min_color=min(min_color,edges[e].c);
}
} ans.push_back(min_color); vector<int> next2;
for(int j=;j<next.size();j++){
int u=next[j];
for(int k=;k<G[u].size();k++){
int e=G[u][k];
int v=edges[e].v;
if(d[u]==d[v]+&&edges[e].c==min_color&&!vis[v]) {
vis[v]=true;
next2.push_back(v);
}
}
}
next=next2;
} printf("%d\n",ans.size());
printf("%d",ans[]);
for(int i=;i<ans.size();i++) printf(" %d",ans[i]);
printf("\n");
} int main(){
int m,u,v,c;
while(scanf("%d %d",&n,&m)==){
edges.clear();
for(int i=;i<n;i++) G[i].clear(); while(m--){
scanf("%d %d %d",&u,&v,&c);
addedges(u-,v-,c);
addedges(v-,u-,c);
}
rev_bfs();
bfs();
}
return ;
}
这道题放了一个月,最后还是看的标程,艾---看来有些题目不是拖得越久就会了,,,,
不要懒的说啊----
加油--gooooooooooooo---
UVa 1599 Ideal Path【BFS】的更多相关文章
- Uva 1599 Ideal Path - 双向BFS
题目连接和描述以后再补 这题思路很简单但还真没少折腾,前后修改提交了七八次才AC...(也说明自己有多菜了).. 注意问题: 1.看清楚原题的输入输出要求,刚了书上的中文题目直接开撸,以为输入输出都是 ...
- 【每日一题】 UVA - 1599 Ideal Path 字典序最短路
题解:给一个1e5个点2e5条边,每个边有一个值,让你输出一条从1到n边的路径使得:条数最短的前提下字典序最小. 题解:bfs一次找最短路(因为权值都是1,不用dijkstra),再bfs一次存一下路 ...
- UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)
给一个n个点m条边(<=n<=,<=m<=)的无向图,每条边上都涂有一种颜色.求从结点1到结点n的一条路径,使得经过的边数尽量少,在此前提下,经过边的颜色序列的字典序最小.一对 ...
- 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)的无向图,每条边上都涂有一种颜色 ...
- UVA 1599 Ideal Path (HDU 3760)
两次bfs: 第一次bfs逆向搜索,得到每个点到终点的最短距离,找出最短路:第二次bfs根据最短距离可以选择满足条件的最短路. 注意!碰到这种很大数据量的题目一定要记得用scanf,printf 输入 ...
- poj 3126 Prime Path 【bfs】
题目地址:http://poj.org/problem?id=3126 Input One line with a positive number: the number of test cases ...
- uva 1599 ideal path(好题)——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGYAAAODCAYAAAD+ZwdMAAAgAElEQVR4nOy9L8/0ypH/Pa8givGiyC
- UVA 1599 Ideal Path
题意: 给出n和m,n代表有n个城市.接下来m行,分别给出a,b,c.代表a与b之间有一条颜色为c的道路.求最少走几条道路才能从1走到n.输出要走的道路数和颜色.保证颜色的字典序最小. 分析: bfs ...
随机推荐
- RT-Thread开篇
一直以来对操作系统都有一种既仰慕又畏惧的情感.一方面被操作系统的强大深深吸引.还有一方面又被操作系统的复杂性感到畏惧. 记得在学校的时候也学过一些操作系统的理论知识,但也只限于理论,更似人云亦云. 本 ...
- mariadb克隆
oracle有克隆安装,事实上mysql/mariadb相似.仅仅需简单几步就能够直接在异机直接启动. 环境: node01安装完毕的mariadb; node02一个新机器 如今将node01克隆到 ...
- Redis和Memcache和MongoDB简介及区别分析(整理)
Redis和Memcache 一.Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年 ...
- jQuery ajax在IE浏览器的跨域问题--jquery.xdomainrequest.min.js
jquery.ajax 加载数据, chrome, firefox, IE10+ 都可以顺利加载数据,但是IE9及以后版本不执,通过执行 jquery.ajax error 函数显示未执行 拒绝访问. ...
- Android封装类似微信的顶部TitleBar弹出的PopupWindow代码
Android仿微信顶部titlebar,点击加号弹出的PopupWindow,是封装好的PopupWindow,直接拿来用即可,先看效果图: 调用代码非常简单,这是MainActivity的代码: ...
- Codeforces 987C. Three displays(o(n^2))
刚开始三重循环tle test11.后来想了个双重循环的方法. 解题思路: 1.双重循环一次,用一个一位数组存j和比j小的i的和的最小值. 2.再双重循环一次,找到比j大的数k,更新结果为ans=mi ...
- 《鸟哥的Linux私房菜》笔记——02. 关于Linux
Unix 历史 1969年以前:伟大的梦想--Bell, MIT 与 GE 的「Multics」系统 1969年:Ken Thompson 的小型 file server system 1973年:U ...
- A. Amr and Music
解题思路:给出n种乐器学习所需要的时间,以及总共的天数, 问最多能够学多少门乐器,并且输出这几门乐器在原序列中的序号(不唯一) 按照升序排序,为了学到最多的乐器,肯定要选择花费时间最少的来学习 然后用 ...
- ES6学习笔记(二十一)编程风格
本章探讨如何将 ES6 的新语法,运用到编码实践之中,与传统的 JavaScript 语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 var ES6 提出了两个 ...
- BZOJ 2565 最长双回文串(manacher)
565: 最长双回文串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3343 Solved: 1692[Submit][Status][Discu ...