题意:
现在有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++;
}
}