Relatively Prime Graph CodeForces - 1009D

Relatively Prime Graph

题目链接:CodeForces - 1009D

题意:定义一个relatively prime graph:每条边的两端点的GCD是1,且图中无自环的连通图;现在给出点的个数n,边的个数m,问能否构建一个relatively prime graph;

图是连通的,m>=n-1;

由1开始找比他大的互质数,直到找到m条;

看上是O(n^2logn)的复杂度,其实不然,如果能找到m条边,就是年找到m对互质数,复杂度远到不了O(n^2logn),n=1000时区间[1, n]中的互质数就大约10000个了;

#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
	return b==0?a:gcd(b, a%b);
}
struct node{
	int u, v;
}edge[100010];
int main(){
	int n, m;
	scanf("%d%d", &n, &m);
	int e=0;
	for(int i=1; i<=n; i++){
		for(int j=i+1; j<=n; j++){
			if(gcd(i, j)==1){
				edge[e].u=i;
				edge[e++].v=j;
			}
			if(e==m) break;
		}
		if(e==m) break;
	}
	if(e<m||m<n-1) printf("Impossible\n");
	else{
		printf("Possible\n");
		for(int i=0; i<e; i++){
			printf("%d %d\n", edge[i].u, edge[i].v);
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/sirius_han/article/details/81076599
今日推荐