POJ3159-Candies
http://poj.org/problem?id=3159
怎么好像又不是我写的- -。。。
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #define INF 999999999 using namespace std; struct node { int y,v,next; }a[150010]; struct Dis { int y,dis; bool operator<(const Dis &a) const {return dis>a.dis;} }; int cnt,head[30010],n,m; void ad(int x,int y,int v) { a[cnt].next=head[x]; a[cnt].y=y; a[cnt].v=v; head[x]=cnt++; } int dijkstra() { Dis c,tmp; int dis[30010],i,x; priority_queue<Dis> q; c.y=1; c.dis=0; for(i=1;i<=n;i++) dis[i]=INF; dis[1]=0; q.push(c); while(!q.empty()) { c=q.top(); q.pop(); x=c.y; if(dis[x]<c.dis) continue; for(i=head[x];i!=-1;i=a[i].next) if(dis[a[i].y]>dis[x]+a[i].v) { dis[a[i].y]=dis[x]+a[i].v; tmp.y=a[i].y; tmp.dis=dis[a[i].y]; q.push(tmp); } } return dis[n]; } int main(void) { int i,x,y,w,ans; cnt=0; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) head[i]=-1; for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&w); ad(x,y,w); } ans=dijkstra(); printf("%d\n",ans); }