#include<bits/stdc++.h> using namespace std; int gcd(int a, int b) { if (b == 0)return a; else return gcd(b, a%b); } int flag[1000]; int getFather(int x) { if (flag[x] == -1)return x; else { int tmp = getFather(flag[x]); flag[x] = tmp; return tmp; } } int main() { int n; cin >> n; vector<int>sugar(n); vector<int>nums(n); for (int i = 0; i < n; i++) { cin >> sugar[i]; flag[i] = -1; nums[i] = 1; } for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { if (gcd(sugar[i], sugar[j]) > 1) { int a = getFather(i); int b = getFather(j); if (a != b) { flag[a] = b; nums[b] += nums[a]; } } } } int res = 0; for (int i = 0; i < n; i++) res = max(res, nums[i]); cout << res << endl; return 0; } 我用并查集做的,也是70%
点赞 2

相关推荐

09-28 22:01
已编辑
广西科技大学 IT技术支持
合适才能收到offe...:找桌面运维?
点赞 评论 收藏
分享
09-12 11:55
已编辑
湖南工商大学 Java
那一天的Java_J...:这种一堆问题的,别去
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务