HDU 1874 畅通工程续
2012-08-27 23:00
211 查看
无向图最短路,邻接表+优先队列
#include<iostream> #include<string> #include<cstring> #include<cmath> #include<cstdio> #include<vector> #include<queue> const int maxn = 210; const int maxm = 1010; const int inf = 0xfffffff; int v[maxm*2],u[maxm*2],w[maxm*2],d[maxn],next[maxm*2],first[maxn]; using namespace std; typedef pair<int,int> pii; bool vis[maxn]; int main() { int n,m,s,t,i; while(scanf("%d%d",&n,&m)!=EOF){ int M=2*m; memset(first,-1,sizeof(first)); for(i=0;i<M;i+=2){ scanf("%d%d%d",&u[i],&v[i],&w[i]); next[i]=first[u[i]]; first[u[i]]=i; u[i+1]=v[i],v[i+1]=u[i]; next[i+1]=first[u[i+1]]; first[u[i+1]]=i+1; w[i+1]=w[i]; } scanf("%d%d",&s,&t); for(i=0;i<n;i++) d[i]=inf; d[s]=0; memset(vis,false,sizeof(vis)); priority_queue<pii,vector<pii>,greater<pii> > q; q.push(make_pair(d[s],s)); while(!q.empty()){ pii u=q.top(); q.pop(); int x=u.second; if(vis[x]) continue; vis[x]=true; for(i=first[x];i!=-1;i=next[i]) if(d[v[i]]>d[x]+w[i]){ d[v[i]]=d[x]+w[i]; q.push(make_pair(d[v[i]],v[i])); } } if(d[t]==inf) printf("-1\n"); else printf("%d\n",d[t]); } return 0; }
相关文章推荐
- hdu 1874 畅通工程续(迪科斯彻算法)
- 畅通工程续HDU杭电1874【dijkstra算法 || SPFA】
- HDU 1874 畅通工程续
- hdu 1874 畅通工程续
- HDU 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu_1874_畅通工程_最短路_dijkstra
- hdu 1874 畅通工程续
- [dijkstra/SPFA/floyd]HDU 1874畅通工程续
- hdu 1874 畅通工程续 spfa
- HDU - 1874 畅通工程续(dijkstra)
- hdu 1874 畅通工程续
- HDU 1874 畅通工程续 (dijkstra模板)
- 【最短路径dijkstra算法】HDU 1874---畅通工程续
- hdu 1874 畅通工程续(迪杰斯特拉优先队列,floyd,spfa)
- hdu 1874 畅通工程续
- 【1874】畅通工程续 (最短路四种算法)(HDU)
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU1874 畅通工程续(最短路)