码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5631 Rikka with Graph

时间:2016-02-21 21:19:54      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

如果原图不连通,直接输出0.

如果原图连通,删除X条边之后要保证新图连通,再看数据是n+1条边-->因此,最多只能删去两条边。

因为n=100,可以枚举进行验证,枚举删去每一条边是否连通,枚举删去每两条边是否连通,验证是否连通可以用并查集,可以BFS。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<algorithm>
#include<iostream>
using namespace std;

const int maxn=100+10;
int n;
int fa[maxn];
int u[maxn],v[maxn];
long long c[maxn][maxn];
int T;
int ans;

int Find(int x)
{
    if(x!=fa[x]) fa[x]=Find(fa[x]);
    return fa[x];
}


int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n); ans=0;
        for(int i=1;i<=n+1;i++)
            scanf("%d%d",&u[i],&v[i]);

        for(int i=0;i<=n;i++) fa[i]=i;
        int un=n;
        for(int i=1;i<=n+1;i++)
        {
            int fu=Find(u[i]);
            int fv=Find(v[i]);
            if(fu!=fv)
            {
                un--;
                fa[fu]=fv;
            }
        }

        if(un!=1) ans=0;
        else
        {
            for(int i=1;i<=n+1;i++)
            {
                for(int k=0;k<=n;k++) fa[k]=k;
                un=n;
                for(int k=1;k<=n+1;k++)
                {
                    if(k==i) continue;
                    int fu=Find(u[k]);
                    int fv=Find(v[k]);
                    if(fu!=fv)
                    {
                        un--;
                        fa[fu]=fv;
                    }
                }
                if(un==1) ans=ans+1;
            }

            for(int i=1;i<=n+1;i++)
            {
                for(int j=i+1;j<=n+1;j++)
                {
                    for(int i=0;i<=n;i++) fa[i]=i;
                    un=n;
                    for(int k=1;k<=n+1;k++)
                    {
                        if(k==i||k==j) continue;
                        int fu=Find(u[k]);
                        int fv=Find(v[k]);
                        if(fu!=fv)
                        {
                            un--;
                            fa[fu]=fv;
                        }
                    }
                    if(un==1) ans=ans+1;
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

 

HDU 5631 Rikka with Graph

标签:

原文地址:http://www.cnblogs.com/zufezzt/p/5205468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!