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);
}
posted @ 2012-08-30 19:24  Yogurt Shen  阅读(162)  评论(0编辑  收藏  举报