codeforces C. System Administrator
大意是给定n,m,v,n个点,在这n个点之间连m条双向边,使得去掉点v之后该图不连通;
#
yy了一个能联通的最小值,树,如果m<n-1则无解;
then 最大值?
完全图,但是n-1个点的完全图,要抠出一个孤立的点只和v连接,确保v是割点
=(n-1)*(n-2)/2+1;
#
先判无解再输出方案
#include<bits/stdc++.h> using namespace std; int n,m,v,a,b; int main() { cin>>n>>m>>v; int minn=n-1; int maxn=(n-2)*(n-1)/2+1; //n=2,n=3? if(m<minn||m>maxn) { cout<<-1;return 0; } m-=n-1; for(int i=1;i<=n;i++) { if(i==v) continue; cout<<v<<" "<<i<<endl; } if(m) { for(int i=2;i<n;i++) { if(i==v) continue; for(int j=1;j<i;j++) { if(j==v) continue; cout<<i<<" "<<j<<endl; m--; if(m==0) return 0; } } } }