bzoj3408 [Usaco2009 Oct]Heat Wave 热浪(Dijkstra裸题)

来源:互联网 发布:php ip2long 编辑:程序博客网 时间:2024/06/03 20:28

Dijstra裸题。

#include <cstdio>#include <cstring>#include <algorithm>#define N 2510#define M 6210#define inf 0x3f3f3f3finline int read(){    int x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();    return x*f;}int n,m,s,t,d[N],h[N],num=0;bool f[N];struct edge{    int to,next,val;}data[M<<1];int main(){//  freopen("a.in","r",stdin);    n=read();m=read();s=read();t=read();    while(m--){        int x=read(),y=read(),val=read();        data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].val=val;        data[++num].to=x;data[num].next=h[y];h[y]=num;data[num].val=val;    }memset(d,0x3f,sizeof(d));f[s]=1;    for(int i=h[s];i;i=data[i].next){        int y=data[i].to;        d[y]=std::min(d[y],data[i].val);    }    for(int k=2;k<=n;++k){        int j=0;        for(int i=1;i<=n;++i)            if(!f[i]&&d[i]<d[j]) j=i;        f[j]=1;if(j==t) break;        for(int i=h[j];i;i=data[i].next){            int y=data[i].to;            d[y]=std::min(d[y],d[j]+data[i].val);        }    }    printf("%d\n",d[t]);    return 0;}