UVa1599 Ideal Path(双向bfs+队列判重)
2018-02-09 02:04
435 查看
紫书上的一道例题,题目链接
做两次bfs,第一次记录可达n的点到n的距离,到点1为止
第二次 要在距离满足上一个点-1的基础上找边的最小值,这道题并不需要找到一条路径,只需要输出边的值即可,所以即便有多条边,也直接记录最小值就好了。
需要注意的一点,为了避免超时,需要加一个优化,用v数组来记录点是否被加入到队列中,即队列去重
做两次bfs,第一次记录可达n的点到n的距离,到点1为止
第二次 要在距离满足上一个点-1的基础上找边的最小值,这道题并不需要找到一条路径,只需要输出边的值即可,所以即便有多条边,也直接记录最小值就好了。
需要注意的一点,为了避免超时,需要加一个优化,用v数组来记录点是否被加入到队列中,即队列去重
#include <bits/stdc++.h> #define ll long long #define pb push_back #define inf 0x3f3f3f3f #define rep(i,a,b) for(int i=a;i<b;i++) #define rep1(i,a,b) for(int i=a;i>=b;i--) #define rson rt<<1|1,m+1,r #define lson rt<<1,l,m using namespace std; const int N=1e5+10; int arr ,vis ,res ,v ; struct node { int b,c; }; vector<node>G ; int main() { ios::sync_with_stdio(false); int n,m; while(cin>>n>>m) { memset(vis,0,sizeof vis); memset(res,0,sizeof res); memset(v,0,sizeof v); for(int i=0;i<N;i++) G[i].clear(); rep(i,0,m) { int a,b,c; cin>>a>>b>>c; G[a].pb({b,c}); G[b].pb({a,c}); } queue<int>q; q.push(n); vis =1; while(!q.empty()) { int a=q.front(); q.pop(); int pp=0; rep(i,0,G[a].size()) { node y=G[a][i]; if(!vis[y.b]) { vis[y.b]=vis[a]+1; q.push(y.b); if(y.b==1) {pp=1;break;} } } if(pp) break; } while(!q.empty()) q.pop(); 4000 q.push(1); while(!q.empty()) { int a=q.front(); q.pop(); int mi=inf,pp=0; if(a==n)break; rep(i,0,G[a].size()) { node y=G[a][i]; if(vis[y.b]==vis[a]-1) mi=min(y.c,mi); } rep(i,0,G[a].size()) { node y=G[a][i]; if(!v[y.b]&&vis[y.b]==vis[a]-1&&y.c==mi) { q.push(y.b); v[y.b]=1; } } int index=vis[1]-vis[a]; if(res[index]==0)res[index]=mi; else res[index]=min(res[index],mi); } cout<<vis[1]-1<<endl<<res[0]; rep(i,1,vis[1]-1) cout<<' '<<res[i]; cout<<endl; } return 0; }
相关文章推荐
- UVA 1599 Ideal Path【双向bfs+非简单图的最短路】
- uva1599 双向bfs+路径字典序输出
- UVA 1599 Ideal Path 【两次BFS+贪心】 (好题)
- UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)
- 例题6-20 uva1599 Ideal Path (双向bfs+字典序)
- UVa 1599 Ideal Path (两次BFS)
- UVA 1599 Ideal Path (理想路径)
- UVa 1599 (字典序最小的最短路) Ideal Path
- UVa 11054/HDU 1489/POJ 2940 Wine trading in Gergovia(贪心&双向队列)
- uva1599 bfs双向遍历 利用数组保存中间结果
- UVA 1599 Ideal Path
- uva 1599 Ideal Path (两次bfs)
- UVA 1599(p173)----Ideal Path
- UVa 1599 - Ideal Path(BFS)
- UVA 1599, POJ 3092 Ideal Path 理想路径 (逆向BFS跑层次图)
- UVa1599 - Ideal Path
- uva 1601 poj 3523 Morning after holloween 万圣节后的早晨 (经典搜索,双向bfs+预处理优化+状态压缩位运算)
- UVA - 1599 Ideal Path
- Uva 1599 Ideal path