首页 > 其他 > 详细

Codeforces 1009D Relatively Prime Graph 【贪心】【复杂度分析】

时间:2018-07-15 14:21:31      阅读:152      评论:0      收藏:0      [点我收藏+]

我的代码看起来复杂度是n^2*logn【枚举i,j==n^2 , 判断gcd==logn】 (n=1e5)但为什么过了呢?

因为数据里限定了m也是1e5级别的数

如果impossible 【及贪心完造的边还没有m这么多】,那n一定很小,小到n^2 * logn可以过;

如果possible,那一定n^2还没有枚举完就造完m条边,直接break了。【因为n^2枚举完造的边与m不是一个数量级的数】

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int u[100005],v[100005],pool;
 5 
 6 int gcd(int a,int b){//a大于b 
 7     if(b==0) return a;
 8     return gcd(b,a%b);
 9 }
10 //connected
11 int main(){
12     int n,m; cin>>n>>m;
13     
14     if(m<n-1) { cout<<"Impossible"; return 0; }
15     
16     for(int i=1;i<=n;i++){//u向v建边不会影响其余的边,因为只和gcd有关 
17         for(int j=i+1;j<=n;j++){
18             if(pool==m) break;
19             if( gcd(j,i)==1 ) { u[++pool]=i; v[pool]=j; }
20         }
21         if(pool==m) break;
22     }
23     
24     if(pool==m){
25         cout<<"Possible"<<endl;
26         for(int i=1;i<=pool;i++) cout<<u[i]<<" "<<v[i]<<endl;    
27     }
28     else cout<<"Impossible";
29     
30     return 0;
31 }

 

Codeforces 1009D Relatively Prime Graph 【贪心】【复杂度分析】

原文:https://www.cnblogs.com/ZhenghangHu/p/9313362.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!