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 ...
随机推荐
- android 处理Back键按下事件
package com.example.keyevent; import android.os.Bundle; import android.view.KeyEvent; import android ...
- NOIP2017提高组模拟赛5 (总结)
NOIP2017提高组模拟赛5 (总结) 第一题 最远 奶牛们想建立一个新的城市.它们想建立一条长度为N (1 <= N <= 1,000,000)的 主线大街,然后建立K条 (2 < ...
- sicily 1146 采药 (动规)
打代码不走心会掉坑里的.. 下边是代码: //1146.采药 //t表示总时间 //m表示草药数 //w表示采药时间 //v表示草药价值 #include <iostream> using ...
- ImageUtils
JavaSE package com.easystructure.utils.system; import java.awt.Color; import java.awt.Font; import j ...
- Kali linux 2016.2(Rolling)中的Exploits模块详解
简单来将,这个Exploits模块,就是针对不同的已知漏洞的利用程序. root@kali:~# msfconsole Unable to handle kernel NULL pointer der ...
- C#调用webservice(一)
最近一直在搞网络编程,这篇是关于webservice的,准备写两篇例子这篇是实现手机号码归宿地查询,下篇准备写实现机票查询. 这个网站(http://www.webxml.com.cn/zh_cn/i ...
- shell 文件中添加内容
下文所有 1111 , 2222 均为字符串 sed -i '/1111/i\2222' a.txt 在a.txt中找到所有符合1111得 前面加上2222 sed -i '/1111/a\2 ...
- mycat读写分离+垂直切分+水平切分+er分片+全局表 测试
原文http://blog.163.com/bigoceanwu@126/blog/static/172718064201683031639683/ 读写分离:利用最基础的mysql主从复制,事务性的 ...
- 紫书 习题 8-20 UVa 1620 (找规律+求逆序对)
这道题看了半天没看出什么规律, 然后看到别人的博客, 结论是当n为奇数且逆序数为奇数的时候 无解, 否则有解.但是没有给出证明, 在网上也找到详细的证明--我也不知道是为什么-- 求逆序对有两种方法, ...
- 2019年北航OO第二单元(多线程电梯任务)总结
一.三次作业总结 1. 说在前面 对于这次的这三次电梯作业,我采用了和几乎所有人都不同的架构:将每个人当作一个线程.这样做有一定的好处:它使得整个问题的建模更加自然,并且在后期人员调度变得复杂时,可以 ...