zoukankan      html  css  js  c++  java
  • P1197 [JSOI2008]星球大战(链式前向星 + 逆并查集)

    https://www.luogu.com.cn/problem/P1197

    #include<bits/stdc++.h>
    
    using namespace std;
    const int maxn = 4e5 + 5;
    int a, b, n, m, k;
    int head[maxn], tot, fa[maxn], c[maxn], ans[maxn];
    bool pan[maxn];
    struct node {
        int next, to;
    } edge[maxn];
    //链式前向星
    void add(int a, int b) {
        edge[tot].to = b;
        edge[tot].next = head[a];
        head[a] = tot++;
    }
    
    int find(int x) {
        return fa[x] == x ? x : fa[x] = find(fa[x]);
    }
    
    int main() {
        // freopen("in", "r", stdin);
        memset(head, -1, sizeof(head));
        cin >> n >> m;
        for (int i = 0; i < n; i++)
            fa[i] = i;
        for (int i = 1; i <= m; i++) {
            cin >> a >> b;
            add(a, b);
            add(b, a);
        }
        cin >> k;
        for (int i = 0; i < k; i++) {
            cin >> c[i];
            pan[c[i]] = true;
        }
        for (int i = 0; i < n; i++) {
            if (!pan[i])
                for (int j = head[i]; j >= 0; j = edge[j].next) {
                    if (pan[edge[j].to])continue;
                    int x = find(i);
                    int y = find(edge[j].to);
                    fa[x] = y;
                }
        }
        for (int i = 0; i < n; i++)
            if (!pan[i] && find(i) == i)
                ans[k]++;
        for (int i = k - 1; i >= 0; i--) {
            int x = 0;
            pan[c[i]] = false;
            for (int j = head[c[i]]; j >= 0; j = edge[j].next) {
                if (!pan[edge[j].to]) {
                    int z = find(c[i]);
                    int y = find(edge[j].to);
                    if (z != y) {
                        fa[z] = y;
                        x++;
                    }
                }
            }
            ans[i] = ans[i + 1] - x + 1;
        }
        for (int i = 0; i <= k; i++)
            cout << ans[i] << endl;
        return 0;
    }
    View Code
  • 相关阅读:
    hdoj_1556Color the ball
    wchar_t与char转换(总结)
    算法艺术——网络最大流
    poj_3268Silver Cow Party
    poj_2352Stars
    BellmanFord模板
    saas模式
    什么是管道
    什么是CMMI
    saas模式
  • 原文地址:https://www.cnblogs.com/xcfxcf/p/12378816.html
Copyright © 2011-2022 走看看