Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Dij算法+优先队列+vector邻接表,一直TLE,,,望路过的大神指点迷津(有详细注释)#include<cstdio> #include<vector> #include<queue> #include<utility> #include<algorithm> using namespace std; const int MAXN=33333; const int INF=0xfffffff; struct edge{int to,cost;}; typedef pair<int,int> pii; int n,m; int dis[MAXN]; //用于保存1到各点的最短距离 vector<edge> v[MAXN]; int dij() { priority_queue<pii,vector<pii>,greater<pii> > que; fill(dis+1,dis+n+1,INF); dis[1]=0; que.push(make_pair(0,1)); while(!que.empty()) { pii p=que.top(); que.pop(); if(dis[p.second]<p.first) continue; for(int i=0;i<v[p.second].size();++i) { edge e=v[p.second][i]; if(dis[e.to]>dis[p.second]+e.cost) { dis[e.to]=dis[p.second]+e.cost; que.push(make_pair(dis[e.to],e.to)); } } } return dis[n]; } int main() { scanf("%d%d",&n,&m); while(m--) { int x; edge e; scanf("%d%d%d",&x,&e.to,&e.cost); v[x].push_back(e); //用vector实现邻接表 } printf("%d\n",dij()); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator