UVa 1599 - Ideal Path(BFS)
来源:互联网 发布:巴恩斯2016总决赛数据 编辑:程序博客网 时间:2024/04/20 07:02
给出n个点,m条边的无向图,每条边有一种颜色,求从结点1到结点n颜色字典序最小的最短路径。
例题,书上给了思路,首先反向BFS,记录结点到n最短距离,然后从起点BFS,每次优先选择字典序最小的颜色的路径。
#include<cstdio>#include<cstring>#include<vector>#include<queue>using namespace std;const int maxn=100010;const int inf=1<<30;int n,vis[maxn],d[maxn];vector<int> g[maxn],ans;struct way{ int u,v,c; way(int u=0,int v=0,int c=0):u(u),v(v),c(c){}};vector<way> ways;void build(int u,int v,int c){//储存边。 ways.push_back(way(u,v,c)); int i=(int)ways.size()-1; g[u].push_back(i);}void rev_bfs(){//反向BFS,记录距离。 memset(vis,0,sizeof(vis)); d[n-1]=0; vis[n-1]=true; queue<int> q; q.push(n-1); while(!q.empty()){ int v=q.front(); q.pop(); for(int i=0;i<g[v].size();++i){ int e=g[v][i]; int u=ways[e].v; if(!vis[u]){ vis[u]=true; d[u]=d[v]+1; q.push(u); } } }}void bfs(){ memset(vis,0,sizeof(vis)); ans.clear(); vis[0]=true; vector<int> next; next.push_back(0); for(int i=0;i<d[0];++i){ int min_color=inf; for(int j=0;j<next.size();++j){ int u=next[j]; for(int k=0;k<g[u].size();++k){ int e=g[u][k]; int v=ways[e].v; if(d[u]==d[v]+1) min_color=min(min_color,ways[e].c); } } ans.push_back(min_color); vector<int> next2; for(int j=0;j<next.size();++j){ int u=next[j]; for(int k=0;k<g[u].size();++k){ int e=g[u][k]; int v=ways[e].v; if(d[u]==d[v]+1&&!vis[v]&&ways[e].c==min_color){ vis[v]=true; next2.push_back(v); } } } next=next2; } printf("%d\n",(int)ans.size()); for(int i=0;i<ans.size();++i){ if(i) printf(" "); printf("%d",ans[i]); } printf("\n");}int main(){ int u,v,c,m; while(~scanf("%d%d",&n,&m)){ ways.size(); for(int i=0;i<n;++i) g[i].clear(); while(m--){ scanf("%d%d%d",&u,&v,&c); build(u-1,v-1,c); build(v-1,u-1,c); } rev_bfs(); bfs(); } return 0;}
0 0
- UVa 1599 - Ideal Path(BFS)
- uva 1599 Ideal Path (两次bfs)
- UVA 1599 Ideal Path 【两次BFS+贪心】 (好题)
- UVa 1599 - Ideal Path <两次BFS>
- uva 1599 - Ideal Path
- UVa 1599 Ideal Path
- Uva - 1599 - Ideal Path
- UVa 1599 Ideal Path
- UVa 1599 Ideal Path
- UVA 1599 Ideal Path
- uva UVA - 1599 Ideal Path
- UVA 1599 Ideal Path (理想路径)
- UVA 1599(p173)----Ideal Path
- uva 1599 ideal path(好题)——yhx
- uva 1599 ideal path(好题)——yhx
- UVA 1599 Ideal Path【双向bfs+非简单图的最短路】
- 理想路径(Ideal Path,UVa 1599)
- UVa 1599 Ideal Path[待AC]
- 苏凡:像阿甘一样创造不平凡的人生
- 编译wifi移植过程
- 在rhel6.3 x86-64系统上安装lsscsi包
- HDU-2572-终曲
- android内存管理(一)
- UVa 1599 - Ideal Path(BFS)
- diershi
- 时间工具
- Amazon EC2制作自定义AMI
- 矩阵快速幂取模
- 给新手关于自增自减运算的一些警示
- Spring 简介
- 后缀数组(最长回文子串)——ural 1297
- leetcode_69_Sqrt(x)