UVALive 7638

题目大意:两个结点之间的gcd>1,那么这两个结点就可以建边,问最终有几个联通块。

题目思路:想到了并查集,但是单纯使用就T掉了O(n^2)。看了网上别的大神的博客,大体思路是这样的:把每个数进行质因数分解,然后把这个数和他的质因数建边。那么只要有相同质因数的两个数都会在同一个联通块里,因为x1<=1e6,那么遍历1~1e6的所有数字,该有边的肯定会在一个联通块里面O(n)。(比赛时候没想到,下回注意,放在这里提醒自己)。

代码如下:


#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <string>
#include <vector>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxm=1000005;
int n,a[maxm];
int par[maxm],rak[maxm];
bool vis[maxm];
int ans;
vector<int> g[maxm];
void inite()
{
    for(int i=1;i<=maxm;i++)
    {
        par[i]=i;
        rak[i]=0;
    }
}
int find(int x)
{
    if(par[x]==x) return x;
    else {
            return par[x]=find(par[x]); 
    }
}
void unite(int x,int y)
{
    x=find(x);
    y=find(y);
    if(x==y) return;
    if(rak[x]<rak[y]){
    par[x]=y;
    }
    else{
        par[y]=x;
        if(rak[x]==rak[y]) rak[x]++;
    }
}
void solve()
{
    for(int i=2;i<=maxm;i++)
    for(int j=i;j<=maxm;j+=i)
    g[j].push_back(i);
}//把数和质因数建边啊。
int main()
{
    solve();//o(n)复杂度。
    int t,kase=1;
    scanf("%d",&t);
    while(t--)
    {   
        inite(); 
        ans=0;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            for(int j=0;j<g[a[i]].size();j++) unite(a[i],g[a[i]][j]);
        }
        memset(vis,false,sizeof(vis));
        for(int i=0;i<n;i++)
        {
            int f=find(a[i]);
            if(!vis[f])
            {
                ans++;
                if(a[i]!=1) vis[f]=true;
            } 
        }
        printf("Case %d: %d\n",kase++,ans);
    }
    return 0;
}



内容概要:本文详细介绍了Maven的下载、安装与配置方法。Maven是基于项目对象模型(POM)的概念,用于项目管理和构自动化的工具,能有效管理项目依赖、规范项目结构并提供标准化的构流程。文章首先简述了Maven的功能特点及其重要性,接着列出了系统要求,包括操作系统、磁盘空间等。随后,分别针对Windows、macOS和Linux系统的用户提供了详细的下载和安装指导,涵盖了解压安装包、配置环境变量的具体操作。此外,还讲解了如何配置本地仓库和镜像源(如阿里云),以优化依赖项的下载速度。最后,给出了常见的错误解决方案,如环境变量配置错误、JDK版本不兼容等问题的处理方法。 适合人群:适用于初学者以及有一定经验的Java开发人员,特别是那些希望提升项目构和依赖管理效率的技术人员。 使用场景及目标: ①帮助开发者掌握Maven的基本概念和功能特性; ②指导用户完成Maven在不同操作系统上的安装与配置; ③教会用户如何配置本地仓库和镜像源以加快依赖项下载; ④解决常见的安装和配置过程中遇到的问题。 阅读议:由于Maven的安装和配置涉及多个步骤,议读者按照文中提供的顺序逐步操作,并仔细检查每个环节的细节,尤其是环境变量的配置。同时,在遇到问题时,可参考文末提供的常见问题解决方案,确保顺利完成整个配置过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值