邻接表+dij为甚麽全TLE了?求助
查看原帖
邻接表+dij为甚麽全TLE了?求助
299817
⚡牛逼的蒟蒻楼主2020/12/12 23:14
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;

const int inf = 0x3f3f3f3f;

struct data
{
    int to, val;
};

int n, m, s;
int dis[101000];
int book[101000];
vector <data> g[1001000];

void dij(int s)
{
    memset(dis, 0x3f, sizeof(dis));
    for (int i = 0; i < g[s].size(); i++)
    {
        dis[g[s][i].to] = min(dis[g[s][i].to], g[s][i].val);
    }
    book[s] = 1;

    for (int j = 0; j < n - 1; j++)
    {
        int minn = s;
        int mn = inf;
        for (int i = 1; i <= n; i++)
        {
            if (book[i] == 0 && mn > dis[i])
            {
                mn = dis[i];
                minn = i;
            }
        }

        book[minn] = 1;
        for (int i = 0; i < g[minn].size(); i++)
        {
            if (book[g[minn][i].to] == 0 && dis[g[minn][i].to] > dis[minn] + g[minn][i].val)
            {
                dis[g[minn][i].to] = dis[minn] + g[minn][i].val;
            }
        }
    }
}

int main()
{
    int a, b, c;
    cin >> n >> m >> s;
    for (int i = 0; i < m; i++) 
    {
        cin >> a >> b >> c;
        data t;
        t.to = b;
        t.val = c;
        g[a].push_back(t);
    }
    dij(s);
    for (int i = 1; i <= n; i++) 
    {
        if(i == s)
        {
            cout << 0 << " ";
            continue;
        }
        if(dis[i] == inf)
        {
            cout << 2147483647 << ' ';
            continue;
        }
        else 
        {
            printf("%d ", dis[i]);
        }
    }
}
2020/12/12 23:14
加载中...