zoukankan      html  css  js  c++  java
  • BestCoder Round #73 (div.2)

    1001 Rikka with Chess

    ans = n / 2 + m / 2

    1002 Rikka with Graph

    题意:n + 1条边,问减去至少一条使剩下的图连通的方案数。

    分析:原来暴力选一条或两条就行了,脑子笨了。判连通用BFS或并查集,此题并查集更好

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <map>
    #include <string>
    #include <set>
    using namespace std;
    
    typedef long long ll;
    const int N = 1e2 + 5;
    struct DSU  {
        int rt[N];
        DSU()   {
            memset (rt, -1, sizeof (rt));
        }
        int Find(int x) {
            return rt[x] == -1 ? x : rt[x] = Find (rt[x]);
        }
        void Union(int x, int y)    {
            x = Find (x);   y = Find (y);
            if (x == y) return ;
            rt[x] = y;
        }
        bool same(int x, int y) {
            return Find (x) == Find (y);
        }
    };
    int u[N], v[N];
    
    int main(void)  {
        int T;  scanf ("%d", &T);
        while (T--) {
            int n;  scanf ("%d", &n);
            for (int i=0; i<n+1; ++i)    {
                scanf ("%d%d", u+i, v+i);
            }
            int ans = 0;
            for (int i=0; i<n+1; ++i)   {
                DSU dsu;    int edge = 0;
                for (int j=0; j<n+1; ++j)   {
                    if (i == j) continue;
                    if (!dsu.same (u[j], v[j]))  {
                        dsu.Union (u[j], v[j]);
                        edge++;
                    }
                    if (edge == n - 1)  break;
                }
                if (edge == n - 1)  ans++;
            }
            for (int i=0; i<n+1; ++i)   {
                for (int j=i+1; j<n+1; ++j)   {
                    DSU dsu;    int edge = 0;
                    for (int k=0; k<n+1; ++k)   {
                        if (k == i || k == j)   continue;
                        if (!dsu.same (u[k], v[k]))  {
                            dsu.Union (u[k], v[k]);
                            edge++;
                        }
                        if (edge == n - 1)  break;
                    }
                    if (edge == n - 1)  ans++;
                }
            }
            printf ("%d
    ", ans);
        }
    
        return 0;
    }
    

    1003 Rikka with Array

    待补

    编译人生,运行世界!
  • 相关阅读:
    使用阿里云docker加速器
    Linux之screen命令详解
    Linux下Git和GitHub使用方法总结
    CentOS 6&7安装ffmpeg
    用yum安装lamp和lnmp环境
    nginx错误日志error_log日志级别
    CentOS7 yum 安装mysql 5.6
    python实现对数据的写入和读取(excel)
    windows下配置sublime
    远程配置pycharm
  • 原文地址:https://www.cnblogs.com/Running-Time/p/5205402.html
Copyright © 2011-2022 走看看