Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define _ ios_base::sync_with_stdio(0);cin.tie(0);
  6. #define endl '\n'
  7. #define f first
  8. #define s second
  9. #define pb push_back
  10.  
  11. typedef long long ll;
  12. typedef pair<int, int> ii;
  13.  
  14. const int INF = 0x3f3f3f3f;
  15. const ll LINF = 0x3f3f3f3f3f3f3f3fll;
  16.  
  17. const int MAXC = 1e5+10;
  18. const int MAXV = 1e4+10;
  19.  
  20. bool tot[MAXC];
  21. set<int> ans[MAXV];
  22. vector<int> g[MAXV];
  23. int c[MAXV];
  24.  
  25. bool vis[MAXV];
  26.  
  27. int gcd(int a, int b){
  28. if (b == 0) return a;
  29. return gcd(b, a%b);
  30. }
  31.  
  32. void dfs(int v){
  33. vis[v] = true;
  34. for (int i : g[v]){
  35. if (vis[i]) continue;
  36. dfs(i);
  37. vector<int> inc;
  38.  
  39. for (int j : ans[i])
  40. for (int k : ans[v])
  41. inc.push_back(gcd(gcd(j, k), c[v]));
  42.  
  43. for (int j : inc)
  44. ans[v].insert(j);
  45. }
  46. for (int j : ans[v])
  47. tot[j] = true;
  48. }
  49.  
  50. int main(){ _
  51. int n, m; cin >> n >> m;
  52. for (int i = 1; i <= n; i++){
  53. cin >> c[i];
  54. ans[i].insert(c[i]);
  55. }
  56. while (m--){
  57. int l, r; cin >> l >> r;
  58. g[l].push_back(r);
  59. g[r].push_back(l);
  60. }
  61. for (int i = 1; i <= n; i++)
  62. if (!vis[i]){
  63. dfs(i);
  64. cout << "!" << endl;
  65. }
  66. int pa = 0;
  67. for (int i : tot) pa += i;
  68. cout << pa << endl;
  69. exit(0);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement