splash365

Untitled

Sep 2nd, 2020 (edited)
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.02 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define     rep(i,k,n)      for(long long int i=k;i<n;i++)
  5. #define     fast            ios_base::sync_with_stdio(false);cin.tie(NULL)
  6. #define     read            freopen("input.txt","r",stdin)
  7. #define     write           freopen("output.txt","w",stdout)
  8. #define     D(x)            cout << '>' << #x << ':' << x << endl
  9. #define     DD(x,y)         cout << '>' << #x << ':' << x << ' ' << #y << ':' << y << endl
  10. #define     DDD(x,y,z)      cout << '>' << #x << ':' << x << ' ' << #y << ':' << y << ' ' << #z << ':' << z << endl
  11. #define     PI              acos(-1)
  12. #define     MP(x, y)        make_pair(x, y)
  13. #define     PB(x)           push_back(x)
  14. #define     ALL(p)          p.begin(),p.end()
  15. #define     CLR(p)          memset(p, 0, sizeof(p))
  16. #define     MEM(a, b)       memset(a, (b), sizeof(a))
  17. #define     ff              first
  18. #define     ss              second
  19. #define     sf              scanf
  20. #define     pf              printf
  21. #define     PII             pair<int, int>
  22. #define     ll              long long int
  23. #define     ull             unsigned long long int
  24.  
  25. inline int two(int n) { return 1 << n; }
  26. inline int test(int n, int b) { return (n>>b)&1; }
  27. inline void set_bit(int & n, int b) { n |= two(b); }
  28. inline void unset_bit(int & n, int b) { n &= ~two(b); }
  29. inline int last_bit(int n) { return n & (-n); }
  30. inline int ones(int n) { int res = 0; while(n && ++res) n-=n&(-n); return res; }
  31.  
  32. template < class T > inline T gcd(T a, T b) {while(b) { a %= b; swap(a, b); } return a;}
  33. template < class T > inline T bigmod(T p, T e, T M){
  34.     ll ret = 1;
  35.     for(; e > 0; e >>= 1){ if(e & 1) ret = (ret * p) % M; p = (p * p) % M; }
  36.     return (T)ret;
  37. }
  38. template < class T > inline T power(T a, T n) {
  39.     if(n==0) return 1;
  40.     if(n==1) return a;
  41.     T R = power(a,n/2);
  42.     return (n%2==0) ? R*R : R*a*R;
  43. }
  44.  
  45. const int MAX = 107;
  46.  
  47. int N, E;
  48. pair<int, pair<int, int> > edges[MAX];
  49. int parent[MAX];
  50. int total_cost;
  51.  
  52.  
  53. void init()
  54. {
  55.     rep(i,0,MAX) parent[i] = i;
  56.     total_cost = 0;
  57. }
  58.  
  59. int Find(int u)
  60. {
  61.     if(u != parent[u]) u = Find(parent[u]);
  62.     return parent[u];
  63. }
  64.  
  65. void Union(int u, int v)
  66. {
  67.     int x = Find(u);
  68.     int y = Find(v);
  69.     parent[x] = y;
  70. }
  71.  
  72. void MST_Kruskal()
  73. {
  74.     for(int i = 0; i<E; i++)
  75.     {
  76.         int u = edges[i].second.first;
  77.         int v = edges[i].second.second;
  78.         int w = edges[i].first;
  79.         cout << u << " " << v << "  --->  " << w << endl;
  80.         if(Find(u) != Find(v))
  81.         {
  82.             total_cost += w;
  83.             Union(u, v);
  84.         }
  85.     }
  86. }
  87.  
  88. int main()
  89. {
  90. #ifndef ONLINE_JUDGE
  91.     read;
  92.     write;
  93. #endif
  94.     init();
  95.     cin >> N >> E;
  96.     rep(i,0,E)
  97.     {
  98.         int u,v,w;
  99.         cin >> u >> v;
  100.         w = u*u + v*v;
  101.         edges[i] = {w, {u,v}};
  102.     }
  103.  
  104.     sort(edges, edges+E);
  105.     MST_Kruskal();
  106.     cout << total_cost << endl;
  107.  
  108.     return 0;
  109. }
  110.  
  111.  
  112. |E| = n(n-1)/2 = (n^2 - n)/2
  113. O(n^2)
  114.  
  115.  
  116. O(Cn^e + nC) = O(n^e)
  117.  
  118. E = O(n^2)
  119.  
  120. O(V + ElogN)  -> adjcency list    -> O(n + n^2logN) = O(N^2logN)
  121. O(N^2 * logN) -> adjcency matrix  -> O(N * NlogN)   = O(N^2logN)
  122.  
  123.  
  124.  
  125.  
  126.  
  127. dijstra(G,S):
  128. for each v in G:            - O(N)
  129.     v.dist      = inf
  130.     v.parent    = -1
  131. S.dist = 0              - O(1)
  132. priority_queue pq
  133. pq.push({0, s.dist})
  134. while(pq.size != 0):                                       - O(N)
  135.     u = pq->top->node
  136.     pq->pop                     - O(logN)
  137.     if u.visted == true then continue
  138.     u.visited == true
  139.     for each vertex v in G:                             - O(N)
  140.         if (u,v) belongs to E:
  141.             if u.dist + cost(u,v) < v.dist:
  142.                 v.dist      = u.dist + cost(u,v)
  143.                 v.parent    = u
  144.                 pq.push(node(v.dist, v))                    - O(logN)
  145.  
  146.  
  147. total time complexity:
  148.             = O(V) + O(1) + O((V*V) * logV)
  149.             = O(V^2 logV)
  150.             = O(N^2 logN)
  151.  
  152.  
  153. 2*i
  154. 2*i + 1
  155.  
  156.  
  157.  
  158. pair<int, int> p[5];
  159.  
  160. p = make_pair(4,5);
  161.  
  162.  
  163.  
  164.  
  165.             1 2 3 4 5
  166.     init    1 2 3 4 5
  167.     1,2     2 3 3 4 5
  168.  
  169.     1 2 3
  170.  
Add Comment
Please, Sign In to add comment