70分求助
查看原帖
70分求助
514343
I_Love_QingYu楼主2022/3/30 11:33
#include <stdio.h>
#include <stdlib.h>
int p,book[100005];
long long int dis[100005][2],inf=2147483647,min;
struct t
{
    long long int w;
    int v,next;
}e[500005];
long long int h[500005];
void add(int a,int b,long long int c)
{
    e[++p].next=h[a];
    h[a]=p;
    e[p].v=b;
    e[p].w=c;
}
int main()
{
    int n,m,a,i,j,b,c,f;
    long long int d;
    scanf("%d%d%d%d",&n,&m,&a,&f);
    for(i=0;i<=n;i++)
        dis[i][0]=inf;
    dis[a][0]=0;    
    for(i=0;i<m;i++)
    {
        scanf("%d%d%lld",&b,&c,&d);
        add(b,c,d);
        add(c,b,d);
        if(b==a && dis[c][0]>d)
        {
            dis[c][0]=d;
            dis[c][1]=d;
        }
        if(c==a && dis[c][0]>d)
        {
            dis[c][0]=d;
            dis[c][1]=d;
        }
    }
    book[a]=1;
    for(c=1;c<n;c++)
    {
        min=inf;
        for(j=1;j<=n;j++)
            if(min>dis[j][0] && book[j]==0)
            {
                min=dis[j][0];
                b=j;
            }
        book[b]=1;
        for(i=h[b];i>0;i=e[i].next)
            if(dis[e[i].v][0]>=dis[b][0]+e[i].w)
            {
                if(dis[b][1]<e[i].w)
                    dis[e[i].v][1]=e[i].w;
                else
                    dis[e[i].v][1]=dis[b][1];
                dis[e[i].v][0]=dis[b][0]+e[i].w;
            }
    }
    printf("%lld ",dis[f][1]);
    return 0;
}
2022/3/30 11:33
加载中...