Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4.  
  5. int n;
  6. cin>>n;
  7. vector<vector<long long> >a(n+1);
  8. vector<long long> A(n+1),B(n+1);
  9. for(int i=1;i<=n;i++){
  10. cin>>A[i];
  11. }
  12. for(int i=1;i<=n;i++){
  13. cin>>B[i];
  14. }
  15.  
  16. for(int i=1;i<=n;i++){
  17. a[i].push_back(0);
  18. for(int j=1;j<=n;j++){
  19. a[i].push_back(-__gcd(A[i],B[j]));
  20. }
  21. }
  22.  
  23. int m=n;
  24. long long INF=100000000000000000;
  25. vector<long long> u (n+1), v (m+1), p (m+1), way (m+1);
  26. for (int i=1; i<=n; ++i) {
  27. p[0] = i;
  28. long long j0 = 0;
  29. vector<long long> minv (m+1, INF);
  30. vector<char> used (m+1, false);
  31. do {
  32. used[j0] = true;
  33. long long i0 = p[j0], delta = INF, j1;
  34. for (int j=1; j<=m; ++j)
  35. if (!used[j]) {
  36. long long cur = a[i0][j]-u[i0]-v[j];
  37. if (cur < minv[j])
  38. minv[j] = cur, way[j] = j0;
  39. if (minv[j] < delta)
  40. delta = minv[j], j1 = j;
  41. }
  42. for (int j=0; j<=m; ++j)
  43. if (used[j])
  44. u[p[j]] += delta, v[j] -= delta;
  45. else
  46. minv[j] -= delta;
  47. j0 = j1;
  48. } while (p[j0] != 0);
  49. do {
  50. int j1 = way[j0];
  51. p[j0] = p[j1];
  52. j0 = j1;
  53. } while (j0);
  54. }
  55. long long cost = v[0];
  56. cout<<cost;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement