UVa1599,Ideal Path
http://blog.csdn.net/u013382399/article/details/38227917
倒着BFS就把我难住了T T,原来这样倒着BFS一遍,遍历完所有的点后就能得到每一点到终点的最短距离啊(其实做完反思后仔细想了想,发现其实当第一次bfs到首节点时,该图已经遍历完成了),一开始没转过这个弯来T T,我直接调用了N次dfs(i)囧rz....
一开始我还想着吧color[]排序...这样更费时.....我写的dfs2()写着写着就乱了,本来思路还清晰,结果越写越乱T T...然后直接看的他的dfs2()
哎,和人家还有很大差距啊......虽然几乎是直接copy的人家的代码,但是做了深刻的反思,也深度的学习了他的代码与方法,算是学到了一些东西吧, 嘻嘻……至少比自己空领悟节约点时间嘛
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#define maxn 100000+5
using namespace std;
vector<int> g[maxn];
vector<int> c[maxn];
int n,m,vis[maxn],d[maxn],ans[maxn];
int init(){
int x,y;
int temp;
memset(vis,,sizeof(vis));
memset(d,,sizeof(d));
memset(ans,,sizeof(ans));
for (int i=;i<=n;i++)g[i].clear();
for (int i=;i<=n;i++)c[i].clear();
for (int i=;i<m;i++){
cin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
cin>>temp;
c[x].push_back(temp);
c[y].push_back(temp);
}
}
void bfs1(int n)
{
memset(d,-,sizeof(d));
queue<int> q;
d[n]=;
q.push(n);
while(!q.empty())
{
int u=q.front();q.pop();
int sz=g[u].size();
for(int v=;v<sz;v++)
{
int vv=g[u][v];
if(vv==)
{
d[]=d[u]+;
return;
}
if(d[vv]==-)
{
d[vv]=d[u]+;
q.push(vv);
}
}
}
return;
}
void bfs2()
{
memset(vis,,sizeof(vis));
queue<int> q;
q.push();
while(!q.empty())
{
int u=q.front();q.pop();
if(d[u]==) return;
int sz=g[u].size();
int mm=-;
for(int i=;i<sz;i++)//找到最小的颜色
{
int vv=g[u][i];
if(d[vv]==d[u]-)
{
if(mm==-)
mm=c[u][i];
else
mm=min(mm,c[u][i]);
}
}
int t=d[]-d[u];
if(ans[t]==) ans[t]=mm;
else
ans[t]=min(mm,ans[t]);
for(int v=;v<sz;v++)
{
int vv=g[u][v];
if(vis[vv]==&&d[vv]==d[u]-&&c[u][v]==mm)
{
q.push(vv);
vis[vv]=;
}
}
}
return;
}
int main()
{
while (cin>>n>>m){
init();
bfs1(n);
bfs2();
printf("%d\n",d[]);
for(int i=;i<d[];i++)
{
if(i) printf(" ");
printf("%d",ans[i]);
}
printf("\n");
}
}
UVa1599,Ideal Path的更多相关文章
- UVa1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
题目大意: 对于一个n个房间m条路径的迷宫(Labyrinth)(2<=n<=100000, 1<=m<=200000),每条路径上都涂有颜色,颜色取值范围为1<=c&l ...
- UVA-1599 Ideal Path(双向BFS)
题目: 给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示).求从结点1到结点n的一条路径, 使得经过的边数尽量少,在此 ...
- 6-20 Ideal Path uva1599
第一个bfs很快 但是我第一次做还用了结构体 这题完全不需要 反而导致了代码非常乱 输入: 一开始我是用m二维数组储存颜色 vector path来储存路径 但是二维数组的下标是不够用的 ...
- 【例题 6-20 UVA - 1599】Ideal Path
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 逆向做一遍bfs. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...
- UVA 1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
https://vjudge.net/problem/UVA-1599 给一个n个点m条边(2<=n<=100000,1<=m<=200000)的无向图,每条边上都涂有一种颜色 ...
- uva 1599 ideal path(好题)——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGYAAAODCAYAAAD+ZwdMAAAgAElEQVR4nOy9L8/0ypH/Pa8givGiyC
- UVa 1599 (字典序最小的最短路) Ideal Path
题意: 给出一个图(图中可能含平行边,可能含环),每条边有一个颜色标号.在从节点1到节点n的最短路的前提下,找到一条字典序最小的路径. 分析: 首先从节点n到节点1倒着BFS一次,算出每个节点到节点n ...
- UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)
给一个n个点m条边(<=n<=,<=m<=)的无向图,每条边上都涂有一种颜色.求从结点1到结点n的一条路径,使得经过的边数尽量少,在此前提下,经过边的颜色序列的字典序最小.一对 ...
- UVA 1599 Ideal Path (HDU 3760)
两次bfs: 第一次bfs逆向搜索,得到每个点到终点的最短距离,找出最短路:第二次bfs根据最短距离可以选择满足条件的最短路. 注意!碰到这种很大数据量的题目一定要记得用scanf,printf 输入 ...
随机推荐
- 201521123101 《Java程序设计》第8周学习总结
1. 本周学习总结 2. 书面作业,本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 学习使用泛型,熟悉定义泛型,熟悉List中实现删除 2.统计文字中的单词数量并按出现 ...
- 201521123025 《Java程序设计》第2周学习总结
1. 本章学习总结 一些注意: (1)在JAVA中,不加后缀的浮点数被默认为double型,如果要用float型就要在数据后加上f或F后缀,如float a=32.6f(正确);float a=32. ...
- 201521123080《Java程序设计》第2周学习总结
1.本周学习总结 a.学习了如何建立远程仓库和本地仓库并建立连接. b.学习了一些基础语法. 2.书面作业 Q1.使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)?分析Str ...
- PTA中提交Java程序的一些套路
201708新版改版说明 PTA与2017年8月已升级成新版,域名改为https://pintia.cn/,官方建议使用Firefox与Chrome浏览器. 旧版 PTA 用户首次在新版系统登录时,请 ...
- 201521123103 《Java学习笔记》 第十一周学习总结
一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 二.书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...
- 201521123040《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- Markdown使用简单示例
标题示例: 标题一 #标题一 标题二 #标题二 标题三 ###标题三 标题四 ####标题四 标题五 #####标题五 标题六 ######标题六 连接示例 [](跳转 ...
- Android开发之基于监听的事件处理
在Android 应用开发过程中,常用监听事件如下:(1) ListView事件监听setOn ItemSelectedListener:鼠标滚动时触发setOnItemClickListener: ...
- Python数据分析(二): Numpy技巧 (3/4)
numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性. 昨天晚上发了第一 ...
- Average of Levels in Binary Tree
Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...