题目链接:http://codeforces.com/contest/1009/problem/D
解题心得:
- 题意就是给你n个点编号1-n,要你建立m条无向边在两个互质的点之间,最后所有点形成一个连通图。
- 首先要明白n个点要形成连通图至少需要n-1条边,然后就是找边了,看了一下n和m的范围都是1e5,总感觉自己暴力能过,写了暴力过了,迷茫。。。。。
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5+10; vector <pair<int,int> > ve; int n,m; void init() { scanf("%d%d",&n,&m); } void Print() { if(m < n-1) { printf("Impossible "); return ; } printf("Possible "); for(int i=0;i<ve.size();i++) { pair <int,int> P = ve[i]; printf("%d %d ",P.first, P.second); } } int main() { init(); int cnt = 0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if(__gcd(i, j) == 1) { ve.push_back(make_pair(i, j)); cnt++; } if(cnt == m) { Print(); return 0; } } } printf("Impossible"); return 0; }