UVa1599 - Ideal Path
2015-03-16 09:01
288 查看
#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(){ 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; }
相关文章推荐
- Uva - 1599 - Ideal Path
- 【例题 6-20 UVA - 1599】Ideal Path
- Uva - 1599 - Ideal Path
- 例题6-20 UVA 1599 Ideal Path理想路径
- UVA 1599 Ideal Path(bfs1+bfs2,双向bfs)
- uva 1599 - Ideal Path
- ACM篇:UVa 1599 -- Ideal Path
- UVa 1599 - Ideal Path(BFS)
- UVa 1599 Ideal Path
- uva 1599 ideal path(好题)——yhx
- UVA - 1599 Ideal Path
- UVA 1599(p173)----Ideal Path
- 例题6-20 UVa1599 Ideal Path(两次BFS)
- uva 1599 Ideal Path (两次bfs)
- UVA 1599 Ideal Path 【两次BFS+贪心】 (好题)
- UVa 1599 Ideal Path[待AC]
- Ideal Path UVA - 1599
- uva UVA - 1599 Ideal Path
- Uva 1599 Ideal path