zoukankan      html  css  js  c++  java
  • hdu 5631 并查集

    题目:hdu 5631
    题意:
    有一个n个点的连通图有n+1条边,问有几种删边的方法可以保持连通。
    分析:
    n个点的连通图,那么最多可以删去两条边,因为n<100,可以枚举删除的是哪两条边,然后判联通。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    const int N=100+5;
    int fa[N],a[N],b[N];
    vector<int>g[N];
    int findfa(int x){return x==fa[x]?x:fa[x]=findfa(fa[x]);}
    int main()
    {
        int T,n; scanf("%d",&T);
        while(T--){
            scanf("%d",&n);
            for(int i=0;i<=n;i++){
                scanf("%d%d",&a[i],&b[i]);
            }
            int ans=0;
            for(int i=0;i<=n;i++){
                for(int j=i;j<=n;j++){
                    for(int k=0;k<=n;k++)fa[k]=k;
                    for(int k=0;k<=n;k++){
                        if(k!=i&&k!=j){
                            int x=findfa(a[k]),y=findfa(b[k]);
                            fa[x]=y;
                        }
                    }
                    int flag=0;
                    for(int k=1;k<=n;k++)if(findfa(k)==k)flag++;
                    if(flag==1)ans++;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    差分约束系统详解
    AC自动机详解
    KMP算法详解
    ST算法详解
    Trie详解
    欧拉路径详解
    树上差分详解
    LCA详解
    树链剖分详解
    树的直径详解
  • 原文地址:https://www.cnblogs.com/01world/p/5651247.html
Copyright © 2011-2022 走看看