真心求助
查看原帖
真心求助
326452
Fearliciz楼主2021/10/4 13:39
#include<bits/stdc++.h>

using namespace std;


int head[100001], edge[100001], to[100001], nxt[100001], d[500001], cnt;
bool v[100001];
int n, m, s, tot;

priority_queue< pair<int, int> > q;

void add( int x, int y, int z )
{
    to[tot] = y;
    edge[++tot] = z;
    nxt[tot] = head[x];
    head[x] = cnt;
}

void dijkstra()
{
	memset(d,0x3f,sizeof(d));
    d[s] = 0;
    q.push( make_pair(0, s) );
    while( !q.empty() )
    {
        int x=q.top().second; q.pop();
        if(v[x]) continue;
        v[x] = 1;
        for( int i = head[x]; i; i = nxt[i] )
        {
            int y = to[i],z = edge[i];
            if( d[y] > d[x] + z )
            {
                d[y] = d[x] + z;
                q.push( make_pair(d[y], y) );
            }
        }
    }
}


int main()
{
    cin>>n>>m>>s;
    
    for(int i = 1; i <= m; i++)
    {
        int x, y, z;
        cin>>x>>y>>z;
        add( x, y, z );
    }
    dijkstra();
    for( int i = 1; i <= n; i++ )
        cout<<d[i]<<" ";
    return 0;
}

为什么样例输出 0 1061109567 1061109567 1061109567(0x3f)

真心求助,有帮助地关注

2021/10/4 13:39
加载中...