zoukankan      html  css  js  c++  java
  • Interesting Computer Game

    Interesting Computer Game

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include <set>
    #include <queue>
    #include <map>
    #include <sstream>
    #include <cstdio>
    #include <cstring>
    #include <numeric>
    #include <cmath>
    #include <iomanip>
    #include <deque>
    #include <bitset>
    #include <cassert>
    //#include <unordered_set>
    #include <unordered_map>
    #define ll              long long
    #define pii             pair<int, int>
    #define rep(i,a,b)      for(int  i=a;i<=b;i++)
    #define dec(i,a,b)      for(int  i=a;i>=b;i--)
    #define forn(i, n)      for(int i = 0; i < int(n); i++)
    using namespace std;
    int dir[4][2] = { { 1,0 },{ 0,1 } ,{ 0,-1 },{ -1,0 } };
    const long long INF = 0x7f7f7f7f7f7f7f7f;
    const int inf = 0x3f3f3f3f;
    const double pi = acos(-1.0);
    const double eps = 1e-6;
    const int mod = 1e9 + 7;
    
    inline ll read()
    {
        ll x = 0; bool f = true; char c = getchar();
        while (c < '0' || c > '9') { if (c == '-') f = false; c = getchar(); }
        while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
        return f ? x : -x;
    }
    inline ll gcd(ll m, ll n)
    {
        return n == 0 ? m : gcd(n, m % n);
    }
    void exgcd(ll A, ll B, ll& x, ll& y)
    {
        if (B) exgcd(B, A % B, y, x), y -= A / B * x; else x = 1, y = 0;
    }
    inline int qpow(int x, ll n) {
        int r = 1;
        while (n > 0) {
            if (n & 1) r = 1ll * r * x % mod;
            n >>= 1; x = 1ll * x * x % mod;
        }
        return r;
    }
    inline int inv(int x) {
        return qpow(x, mod - 2);
    }
    ll lcm(ll a, ll b)
    {
        return a * b / gcd(a, b);
    }
    /**********************************************************/
    const int N = 1e5 + 5;
    
    unordered_map<int, int> f, vis,p,cntdot;
    int find(int x) {
        return f[x] == x ? x : f[x] = find(f[x]);
    }
    bool add(int x, int y) {
        int fx = find(x), fy = find(y);
        if (fx != fy) {
            f[fx] = fy;
            return true;
        }
        return false;
    }
    
    int cnt, fg, sz;
    
    int a[N], b[N],c[N];
    int main() {
        //ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
        int T;
        scanf("%d", &T);
        int cntt = 1;
        while (T--)
        {
            memset(c, 0, sizeof(c));
            vis.clear();
            f.clear();
            cntdot.clear();
            p.clear();
            int res = 0;
            cnt = 0;
            int n;
            scanf("%d", &n);
            rep(i, 1, n)
            {
                scanf("%d%d", &a[i], &b[i]);
                f[a[i]] = a[i];
                f[b[i]] = b[i];
            }
            int cntg = 0, cntn = 0, len = 1;
            unordered_map<int, int> mmp;
            rep(i, 1, n)
            {
                if (find(a[i]) == find(b[i]))
                    c[len++] = find(a[i]);
                else
                    add(a[i], b[i]);
            }
            rep(i, 1, len)
                p[find(c[i])] = 1;
            rep(i, 1, n)
            {
                if (!vis[a[i]])
                    cntdot[find(a[i])]++;
                vis[a[i]] = 1;
                if (!vis[b[i]])
                    cntdot[find(b[i])]++;
                vis[b[i]] = 1;
            }
            for (auto x : cntdot)
            {
                if (!p[x.first])
                    res--;
                res += x.second;
            }
            printf("Case #%d: %d
    ", cntt++,res);
        }
    }
  • 相关阅读:
    48. Rotate Image
    47. Permutations II
    46. Permutations
    45. Jump Game II
    44. Wildcard Matching
    43. Multiply Strings
    42. Trapping Rain Water
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
  • 原文地址:https://www.cnblogs.com/dealer/p/13432012.html
Copyright © 2011-2022 走看看