Prime Independence
Posted ph = x
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prime Independence相关的知识,希望对你有一定的参考价值。
题意:
对于给定集合,求解最大的子集合,使得集合内两两之商不为质数。
解法:
考虑对于每一个数字分解质因数可以得到 $O(nloglogNUM)$ 条两个数字不可以出现在同一集合的信息。
同时发现一条代表冲突的边必然是联结一个由奇数个质数连乘构成的数字和一个由偶数个质数连乘构成的数字。
是一个二分图,考虑最大独立集即可。
#include <bits/stdc++.h> const int N = 100010; using namespace std; int n,timnow; int pre[N],a[N],v[N],cnt[N],Id[500010]; vector<int> g[N],fac[N]; bool find(int x) { for(int i=0;i<(int)g[x].size();i++) { int p = g[x][i]; if(v[p] == timnow) continue; v[p] = timnow; if(!pre[p] || find(pre[p])) { pre[p] = x; return 1; } } return 0; } int main() { int T,Te = 0; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) g[i].clear(),pre[i] = 0,fac[i].clear(),cnt[i]=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); Id[a[i]] = i; int tmp = a[i]; for(int j=2;j*j<=a[i];j++) if(tmp%j==0) { fac[i].push_back(j); while(tmp%j==0) tmp/=j, cnt[i]++; } if(tmp>1) fac[i].push_back(tmp), cnt[i]++; } for(int i=1;i<=n;i++) { for(int j=0;j<(int)fac[i].size();j++) { int tmp = a[i]/fac[i][j]; if(Id[tmp]) { int k = Id[tmp]; if(cnt[i]&1) g[i].push_back(k); else g[k].push_back(i); } } } int ans = 0; for(int i=1;i<=n;i++) { timnow ++; if(find(i)) ans++; Id[a[i]] = 0; } printf("Case %d: %d\n", ++Te, n-ans); } return 0; }
以上是关于Prime Independence的主要内容,如果未能解决你的问题,请参考以下文章
Prime Independence LightOJ - 1356 (HK 最大独立集 板子)
LightOJ 1356 Prime Independence(质因数分解+最大独立集+Hopcroft-Carp)
R语言分类变量独立性检验(Tests of independence)使用Fisher精确检验fisher.test函数检验分类变量的独立性( test of independence)
Understanding Density Independence in Android
R卡方独立性检验(Chi-Square Test of Independence)
AI-Quantifying uncertainty: Inference using full joint distribution, independence, Bayes' rule.(