下载了WA的测试点(3)后,试了一遍然后通过了,但始终90
查看原帖
下载了WA的测试点(3)后,试了一遍然后通过了,但始终90
1590776
website100426楼主2025/1/17 13:05

求巨佬和大神回复, 以下为代码:

#include <bits/stdc++.h>
using namespace std;
struct Edge
{
    int z;
    int val;
    int nexty;
}edge[1000000];
int head[20000];
int cnt=0;
inline void add(int a,int b,int c)
{
    cnt++;
    edge[cnt].z=b;
    edge[cnt].val=c;
    edge[cnt].nexty=head[a];
    head[a]=cnt;
}
int main()
{
    bool visit[20000]={0};
    long long dis[20000];
    int n,m,s;
    int a,b,c;
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=n;i++)dis[i]=9999999999;
    for(int i=0;i<m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        add(a,b,c);
    }
    int curr=s;
    dis[s]=0;
    long long minn;
    while(!visit[curr])
    {
        visit[curr]=true;
        for(int i=head[curr];i!=0;i=edge[i].nexty)
        {
            if(!visit[edge[i].z]&&dis[edge[i].z]>dis[curr]+edge[i].val)
            dis[edge[i].z]=dis[curr]+edge[i].val;
        }
        minn=9999999999;
        for(int i=1;i<=n;i++)
        {
            if(!visit[i]&&minn>dis[i])
            {
                minn=dis[i];
                curr=i;
            }
        }
    }
    for(int i=1;i<=n;i++)printf("%lld ",dis[i]);
    return 0;
}
2025/1/17 13:05
加载中...