codeforce 22C System Administrator

题意:

    现在有n个服务,需要m条关系进行连接。我们要保证去掉v服务系统无法运行。

解析:

    将点分割为三部分一部分 (v)(n-1(v)-1) 1

我们可以得出-1的情况m<(n-1)||m>((n-1)*(n-2)/2+1)

如果可以构造我们只需要先枚举出连通图的几条边。

然后我们再把第二部分逐渐添加边

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m,v;
    cin>>n>>m>>v;
    if(m<(n-1)||m>((n-1)*(n-2)/2+1))
    {
        cout<<"-1"<<endl;
        return 0;
    }
    int f=0;
    for(int i=1; i<=n; i++)
    {
        if(i!=v&&!f)f=i;
        if(i!=v)
        {
            cout<<i<<" "<<v<<endl;
            m--;
        }
    }
    int u=0;
    for(int i=1;i<=n;i++)if(i!=f&&i!=v){u=i;break;}
    while(m){
        if(u!=v&&u!=f)
        for(int i=u+1;i<=n;i++){
            if(i==v||i==f)continue;
            cout<<u<<" "<<i<<endl;
            m--;
            if(m==0)break;
        }
        u++;
    }
}

猜你喜欢

转载自blog.csdn.net/lj130lj/article/details/79949341