第一个bfs很快  但是我第一次做还用了结构体  这题完全不需要  反而导致了代码非常乱

输入:

一开始我是用m二维数组储存颜色  vector path来储存路径

但是二维数组的下标是不够用的   所以颜色也要存在vector里

直接放进去就行了  因为i已经对应好了  地几条路就是第几个颜色  值得学习!!

主要是卡在了有多个路径的颜色是一样的情况

先遍历一次找出最小的颜色  把颜色放进去

然后把该颜色的路径都加入队列即可

开了一个INF9999999不停wa    下次直接开INT_MAX即可

这题挺好的 值得学习!

#include<bits/stdc++.h>
using namespace std;
#define MAX 102400
int n;
int d[MAX];
int ans[MAX];
int vis[MAX];
vector<int>path[MAX],color[MAX];
void bfs(void)
{
queue<int>q;
q.push(n);
d[n]=;
while(!q.empty())
{
int u=q.front();q.pop();
if(u==)return;
for(int i=;i< path[u].size();i++)
{ int v=path[u][i];
if( d[v]==- )
{
q.push(v);
d[v]=d[u]+;
}
}
}
}
void bfs2(void)
{
queue<int>q;
q.push();
while(!q.empty())
{
int u=q.front();q.pop();
if(u==n)return;
int minc=INT_MAX;
for(int i=;i< path[u].size() ;i++)
{
int v=path[u][i];
if( d[u]==+d[ v ]&&color[u][i]<minc )
{
minc=color[u][i];
}
}
if(!ans[ d[u] ] || minc<=ans[d[u]] ) ans[ d[u] ]=minc;
else continue;
for(int i=;i<path[u].size();i++)
{
int v=path[u ][i];
if(!vis[v]&& d[u]==+d[ v ]&color[u][i]==minc )
{
q.push(v);
vis[v]=;
}
}
}
} int main()
{
int q;
while(scanf("%d%d",&n,&q)==)
{
for(int i=;i<MAX;i++){color[i].clear();path[i].clear();}
memset(d,-,sizeof(d));
memset(vis,,sizeof(vis));
memset(ans,,sizeof(ans));
while(q--)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
path[x].push_back(y);
path[y].push_back(x);
color[x].push_back(z);
color[y].push_back(z);
}
bfs();
bfs2();
printf("%d\n", d[]);
for(int i = d[]; i >= ; --i){
if(i==d[]) printf("%d", ans[i]);
else printf(" %d", ans[i]);
}
printf("\n");
}
return ;
}

6-20 Ideal Path uva1599的更多相关文章

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

    题目大意: 对于一个n个房间m条路径的迷宫(Labyrinth)(2<=n<=100000, 1<=m<=200000),每条路径上都涂有颜色,颜色取值范围为1<=c&l ...

  2. UVa1599,Ideal Path

      说实话,这题参考的: http://blog.csdn.net/u013382399/article/details/38227917 倒着BFS就把我难住了T T,原来这样倒着BFS一遍,遍历完 ...

  3. UVA-1599 Ideal Path(双向BFS)

    题目: 给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示).求从结点1到结点n的一条路径, 使得经过的边数尽量少,在此 ...

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

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

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

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

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

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

  7. UVa 1599 (字典序最小的最短路) Ideal Path

    题意: 给出一个图(图中可能含平行边,可能含环),每条边有一个颜色标号.在从节点1到节点n的最短路的前提下,找到一条字典序最小的路径. 分析: 首先从节点n到节点1倒着BFS一次,算出每个节点到节点n ...

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

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

  9. UVA 1599 Ideal Path (HDU 3760)

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

随机推荐

  1. MVC 部分视图:Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 区别

    在视图里有多种方法可以 加载部分视图,包括: Partial()  Action()  RenderPartial()  RenderAction()  RenderPage() 方法. 以下是这些方 ...

  2. 17. Spring Boot 配置嵌入式Servlet容器

    一.如何定制和修改Servlet容器的相关配置 1.配置文件(ServerProperties): 优先级最高 server.port=8081 server.context‐path=/crud s ...

  3. Linux - 日志处理一

    Linux 日志处理 history # 历时命令默认1000条 HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 让history命令显示具体时间 hi ...

  4. tensorflow神经网络拟合非线性函数与操作指南

    本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- ...

  5. kafka.common.KafkaException: Socket server failed to bind to hdp1:9092: Cannot assign requested address.

    ERROR [KafkaServer id=1] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.K ...

  6. C++ vector 使用笔记

    map 插入 vector #include <string> #include <iostream> #include <algorithm> #include ...

  7. 2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析 一.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行 分析一个恶意软件,就分析Exp2或Exp3中生成后门软 ...

  8. SpringBoot整合Jest操作ES

    (1).添加依赖 <dependency> <groupId>io.searchbox</groupId> <artifactId>jest</a ...

  9. Ubuntu 分辨率显示出错,分辨率不是最佳分辨率的解决办法

    本文为转载,但在Ubuntu16.04LTS下亲测有效. (1)首先使用 xrandr 命令列出当前所能检测到的分辨率,如一台显示器,最佳分辨率为 1440x900(我的显示器尽量设置1680x105 ...

  10. 通过全备+主从同步恢复被drop的库或表

    MySQL 中drop 等高危误操作后恢复方法 实验目的: 本次实验以恢复drop操作为例,使用不同方法进行误操作的数据恢复. 方法: 利用master同步(本文)] 伪master+Binlog+同 ...