SCU2016-07 T题 prim算法

来源:互联网 发布:阿里云 数据库 用法 编辑:程序博客网 时间:2024/06/10 00:23

把已经设好的边花费改为0,求最小生成树即可。

#include <cstdio>#include <iostream>#include <cstring>#include <vector>#include <queue>using namespace std;#define pr(x) cout << #x << ": " << x << "  " #define pl(x) cout << #x << ": " << x << endl;typedef pair<int, int> pii;struct jibancanyang{    int G[109][109], n;    bool used[109];    int prim() {        memset(used, false, sizeof(used));        priority_queue<pii, vector<pii>, greater<pii> > que;        int ret = 0;        que.push(pii(0, 1));        while (!que.empty()) {            pii cur = que.top(); que.pop();            if (used[cur.second]) continue;            ret += cur.first;            used[cur.second] = true;            for (int i = 1; i <= n; i++) {                if (!used[i]) que.push(pii(G[cur.second][i], i));            }        }        return ret;    }    void fun() {        scanf("%d", &n);        for (int i = 1; i <= n; i++)             for (int j = 1; j <= n; j++)                scanf("%d", &G[i][j]);        int q, x, y;        scanf("%d", &q);        while (q--) {            scanf("%d%d", &x, &y);            G[x][y] = G[y][x] = 0;        }        printf("%d\n", prim());    }}ac;int main(){#ifdef LOCAL    freopen("in.txt", "r", stdin);    //freopen("out.txt", "w", stdout);#endif    ac.fun();    return 0;}
0 0
原创粉丝点击