我的dij第一个都过不了 但是样例过了是为啥啊
查看原帖
我的dij第一个都过不了 但是样例过了是为啥啊
360849
hygge_楼主2021/6/24 17:49

const int maxn = 1e4 + 10;
const int N = 1e5 + 10;
const int inf = 1e9;
int n, m, s;
int dis[maxn];
int vis[maxn];
int w[maxn][maxn];

void dij(int s) {
    mm(vis, 0);
    mm(dis, 0x3f);
    dis[s] = 0;
    for (int i = 1; i <= n; i++) {
        int num = 0;
        int minn = 0x3f3f3f3f;
        for (int j = 1; j <= n; j++) {
            if (vis[j] == 0 && dis[j] < minn) {
                minn = dis[j];
                num = i;
            }
        }
        if (num == 0) break;
        vis[num] = 1;
        for (int j = 1; j <= n; j++) {
            if (vis[j] == 0 && dis[j] > dis[num] + w[num][j])
                dis[j] = dis[num] + w[num][j];
        }
    }
}

signed main() {
    cin >> n >> m >> s;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            w[i][j] = 0x3f3f3f3f;
        }
    }
    while (m--) {
        int a, b, c;
        cin >> a >> b >> c;
        if (w[a][b] > c)
            w[a][b] = c;
    }
    dij(s);
    for (int i = 1; i <= n; i++)
        cout << dis[i] << " ";
    cout << endl;
}
2021/6/24 17:49
加载中...