求助大佬!!dijkstra WA #7 #8 !!(我是男的)
查看原帖
求助大佬!!dijkstra WA #7 #8 !!(我是男的)
749325
Sincerin楼主2022/10/31 17:13

RT

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define int long long
using namespace std;
const int N=300005;
const int M=3000005;
const int INF=0x7f7f7f7f; 
int head[N],ver[M],edge[M],Next[M],d[N];
bool v[N];
int n,m,tot,x,y,z;
priority_queue<pair <int, int> > q;
inline void add(int x,int y,int z)
{
    ver[++tot]=y;
    edge[tot]=z;
    Next[tot]=head[x];
    head[x]=tot;
}
inline void dijkstra()
{
    memset(d,0x3f,sizeof(d));
    memset(v,0,sizeof(v));
    d[1]=0;
    q.push(make_pair(0,1));
    while(q.size())
    {
        int x=q.top().second;
        q.pop();
        if(v[x]) continue;
        v[x]=1;
        for(register int i=head[x];i;i=Next[i])
        {
            int y=ver[i],z=edge[i];
            if(d[y]>d[x]+z)
            {
                d[y]=d[x]+z;
                q.push(make_pair(-d[y],y));
            }
        }
    }
}
signed main()
{
    scanf("%lld%lld",&n,&m);  
    for(register int i=1;i<=m;i++)
    {
        scanf("%lld%lld%lld",&x,&y,&z); 
        add(x,y,z);
    } 
    dijkstra();
    for(int i=1;i<=n;i++)
    {
        if(d[i]>=INF) printf("-1 ");
        else printf("%lld ",d[i]);
    }
    return 0;
}

用了挺长时间的板子炸了??

2022/10/31 17:13
加载中...