PAT A 1013. Battle Over Cities

来源:互联网 发布:淘宝商家退款流程 编辑:程序博客网 时间:2024/05/16 09:53

PAT A 1013. Battle Over Cities

就是并查集
id[x] = fd(id[x]) 写成 id[x] = fd(x)
导致段错误
ZZ

#include <bits/stdc++.h>using namespace std;struct UnionFind{    vector<int> id;    vector<int> sz;    int n;    int cnt;    UnionFind(int n) : n(n)    {        cnt = n;        id.resize(n);        sz.resize(n);        for (int i = 0; i < n; i++) {            id[i] = i;            sz[i] = 1;        }    }    int fd(int x)    {        if (x == id[x]) return x;        return id[x] = fd(id[x]);    }    void unite(int x, int y)    {        int fx = fd(x);        int fy = fd(y);        if (fx == fy) return;        if (sz[fx] < sz[fy]) swap(fx, fy);        id[fy] = fx;        sz[fx] += sz[fy];        cnt--;    }};int main(){    int n, m, k;    scanf("%d%d%d", &n, &m, &k);    vector< pair<int, int> > a;    for (int i = 0; i < m; i++) {        int u, v;        scanf("%d%d", &u, &v);        u--;        v--;        a.push_back(make_pair(u, v));    }    while (k--) {        int x;        scanf("%d", &x);        x--;        UnionFind uf(n);        for (int i = 0; i < m; i++) {            if (a[i].first != x && a[i].second != x) {                uf.unite(a[i].first, a[i].second);            }        }        cout << uf.cnt - 2 << endl;    }}
0 0
原创粉丝点击