社区讨论

朴素Prim,30分求助(过了最后三个点)

P3366【模板】最小生成树参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo1tzr93
此快照首次捕获于
2023/10/23 02:57
2 年前
此快照最后确认于
2023/11/03 03:30
2 年前
查看原帖
CPP
#include<iostream>
#include<cstring>
using namespace std;

int g[5005][5005], minn[5005];
bool b[5005];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, m, sum = 0;
    cin >> n >> m;
    for(int i = 1; i <= m; ++i) {
        int x, y, z;
        cin >> x >> y >> z;
        g[x][y] = z;
        g[y][x] = z;
    }
    memset(minn, 0x3f, sizeof(minn));
    minn[1] = 0;
    for(int i = 1; i <= n; ++i) {
        int u = 0;
        for(int j = 1; j <= n; ++j) {
            if(!b[j] && minn[j] < minn[u]) u = j;
        }
        if(u == 0) {
            cout << "orz";
            return 0;
        }
        b[u] = 1;
        sum += minn[u];
        for(int j = 1; j <= n; ++j) {
            if(!b[j] && g[u][j] && g[u][j] < minn[j]) minn[j] = g[u][j];
        }
    }
    cout << sum;
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...