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 输入 ...
随机推荐
- centos7 网卡命名
CentOS6 及之前以太网网卡进行顺序命名的:多网卡如:eth0,eth1 依次.Centos7 则不同,命名规则默认是基于固件.拓扑.位置信息来分配.一.网卡命名的策略systemd对网络设备的命 ...
- 自定义滤镜 ColorMatrixFilter
var url:URLRequest = new URLRequest("Koala.jpg"); var l:Loader = new Loader(); l.contentLo ...
- Synchronized和lock的区别和用法
一.synchronized和lock的用法区别 (1)synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要 ...
- python(七) Python中单下划线和双下划线
Python中单下划线和双下划线: 一.分类 (1).以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量. 以单下划线开头的变量和函数被默认是内部函数,使用from mod ...
- Freemarker导出带图片的word
1.新建一doc文档
- centOS6.4 extundelete工具恢复rm -rf 删除的目录[转]
原文:http://www.cnblogs.com/patf/p/3368765.html PS:补充下,我在fedora 19上运行的时候遇到的一个问题: 1 [root@localhost ext ...
- 基于Python的机器学习实战:KNN
1.KNN原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应 ...
- Django中全局Context处理器
1.模板标签和模板变量 模板标签在{% %}中定义: {% if is_logged_in %} Thanks for logging in! {% else %} Please log in. {% ...
- ASP.NET Core Identity 实战(4)授权过程
这篇文章我们将一起来学习 Asp.Net Core 中的(注:这样描述不准确,稍后你会明白)授权过程 前情提要 在之前的文章里,我们有提到认证和授权是两个分开的过程,而且认证过程不属于Identity ...
- linux系统下安装tomcat及配置
一.下载TOMCAT压缩包 apache-tomcat-6.0.44-client.zip 或 apache-tomcat-7.0.69.tar.gz 点击进入官网:http://tomcat.apa ...