6-20 Ideal Path uva1599
第一个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的更多相关文章
- UVa1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
题目大意: 对于一个n个房间m条路径的迷宫(Labyrinth)(2<=n<=100000, 1<=m<=200000),每条路径上都涂有颜色,颜色取值范围为1<=c&l ...
- UVa1599,Ideal Path
说实话,这题参考的: http://blog.csdn.net/u013382399/article/details/38227917 倒着BFS就把我难住了T T,原来这样倒着BFS一遍,遍历完 ...
- UVA-1599 Ideal Path(双向BFS)
题目: 给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示).求从结点1到结点n的一条路径, 使得经过的边数尽量少,在此 ...
- 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. 得到终点到某个点的最短距离. 这样,我们从起点顺序的时候. 就能知道最短路的下一步是要走哪里了. 这样,我们从起 ...
- 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 输入 ...
随机推荐
- Hibernate添加日志--log4j
需要导入 slf4j-log4j12-1.6.2.jar slf4j-api-1.6.2.jar log4j-1.2.16.jar 三个jar文件 编写properties文件,建议将日志输出级别设置 ...
- String类型的方法总结
String :字符串对象的包装类型 var stringObject = new String("wanglehui"); 方法总结: 1.返回该对象表示的基本字符串值(也就是返 ...
- 我的Mac中毒了,病毒居然叫做MacPerformance
禁用 ReportCrash 直接干掉进程肯定不管用,从名字就知道这个进程会自动被触发,除非修改系统配置. Google 了一下,发现很简单,在 terminal 里执行 launchctl unlo ...
- Nginx Server 配置
http { include mime.types; // 主模块:实现对配置文件包含的文件设定,可以减少主配置文件的复杂度: default_type application/octet-strea ...
- react框架的状态管理
安装: cnpm install --save redux cnpm install --save react-redux 安装好后导入模块内容: impor {createStore} from ...
- 利用 python requests完成接口文件上传
最近在准备一个公开课,主题就是利用不同的语言和不同的工具去实现文件的上传和下载. 在利用Jmeter去实现功能的时候,以及利用loadrunner去写脚本的时候,都很顺利,没有任何问题,当我尝试用Py ...
- JavaScript学习 - 基础(三) - 运算符
js运算符 1.算数运算符 包括 加(+) .减-() .乘(*).除(/).余数(%) 减号 还可以表示为 负号 例如: -1,-3 加号 还可以用于字符串拼接 例如: 'a' + 'b' = 'a ...
- Android中的Service:Binder,Messenger,AIDL
http://blog.csdn.net/luoyanglizi/article/details/51594016 http://blog.csdn.net/luoyanglizi/article/d ...
- nginx反向代理实现前后端分离&跨域问题
1.代理和跨域 1.1 正向代理 1)用户希望代理服务器帮助其和要访问服务器之间实现通信,需要: a.用户IP报文的目的IP=代理服务器IP: b.用户报文端口号=代理服务器监听端口号: c.HTTP ...
- aircrack-ng笔记
开启监听: airmon-ng start wlan0 抓包: airodump-ng wlan0mon 查看wifi ^C结束 airodump-ng -c 6 --bssid C8:3A:35:3 ...