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

    题意:
    给出一张 nnn 个点 n+1n+1n+1 条边的无向图,你可以选择一些边(至少一条)删除。
    分析:
    一张n个点图,至少n-1条边才能保证联通
    所以可以知道每次可以删去1条边或者两条边
    一开始看了题解,我搞不出来【每次删去1条或者2条】
    T^T就是那么弱,妈的
    然后判断是否联通,DFS联通图可以,但是好麻烦的

    所以想到判断一个集合,用并查集,妥妥的

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    #include <queue>
    #include <math.h>
    #include <queue>
    #include <stack>
    using namespace std;
    #define INF 0x3f3f3f
    #define pi acos(-1.0)
    #define N 100010
    #define LL long long
    #define mm 1000000007
    int pre[110];
    int n;
    struct asd{
        int a,b;
    };
    asd q[110];
    
    int Find(int x)
    {
        int r=x;
        while(pre[r]!=r)
        {
            r=pre[r];
        }
        int i,j;
        i=x;
        while(pre[i]!=r)
        {
            j=pre[i];
            pre[i]=r;
            i=j;
        }
        return r;
    }
    
    int FUCK(int x,int y)
    {
        for(int i=1;i<=n;i++)
            pre[i]=i;
        for(int i=1;i<=n+1;i++)     //遍历的是点--点(边)哟
        {
            if(i==x||i==y)          //去边
                continue;
            int aa=Find(q[i].a);
            int bb=Find(q[i].b);
    
            if(aa!=bb)
            {
                pre[aa]=bb;
            }
        }
        int ant=0;
        for(int i=1;i<=n;i++)
        {
            if(pre[i]==i)
            {
                ant+=1;
            }
        }
        if(ant==1)
            return 1;
        return 0;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            for(int i=1;i<=n+1;i++)
            {
                scanf("%d%d",&q[i].a,&q[i].b);     //输进去的是点--点(边)
            }
            int ans=0;
            for(int i=1;i<=n+1;i++)
            {
                for(int j=i;j<=n+1;j++)
                {
                    if(FUCK(i,j))
                        ans+=1;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    相对定位和绝对定位
    一切重新开始
    Oracle Profile 使用
    使用javamail发送邮件错误:550 5.7.1 Unable to relay
    gvim 备份文件去除 配置
    解决Maven中OutOfMemory错误
    sqlplus启动后的环境SQLPATH的设置
    ORA-30004 错误处理
    oracle 锁表查询及解决、表字段查询
    如何进行软件架构设计
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934583.html
Copyright © 2011-2022 走看看