题目链接:点击打开链接
题目,给你n个城市,下标从1-n,再给你m对城市,要求不能在这m对城市之间建设道路,要求建最少的道路满足任何一个城市可以到达另外一个城市最多经过两条路。
保证答案一定存在。
我们在观察一下 m的限制条件 m<n/2 说明至少存在两个城市可以与其他城市直接相连,那么贪心即可,把m对城市的标号全部置为0,然后找标记为1 的城市,则该城市可以当中间点,然后让所有其他城市与该城市相连即可。
好水= =。。
AC code:
/*2017年10月11日20点32分
AC
贪心即可*/
#include <iostream>
#include <map>
#include <set>
#include <string>
#include<string.h>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn=1100;
bool flag[maxn];
int main(){
int n,m;
scanf("%d%d",&n,&m);
memset(flag,true,sizeof(flag));
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
flag[a]=false;
flag[b]=false;
}
int center;
for(int i=1;i<=n;i++){
if(flag[i]) center=i;
}
printf("%d\n",n-1);
for(int i=1;i<=n;i++){
if(i!=center){
printf("%d %d\n",center,i);
}
}
return 0;
}