Nik_Perepelov

Надар 6 контест

Oct 20th, 2021
899
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. //1
  2. #include<iostream>
  3. #include<limits.h>
  4. using namespace std;
  5.  
  6. int main() {
  7.     int n, m;
  8.     int res = 0;
  9.     cin >> n >> m;
  10.     int g[n][n];
  11.     int edge_to[n];
  12.     int used[n];
  13.     for(int i=0;i<n;i++){
  14.         for(int j=0;j < n;j++){
  15.             g[i][j] = INT_MAX;
  16.         }
  17.         edge_to[i] = INT_MAX;
  18.         used[n] = 0;
  19.     }
  20.  
  21.     edge_to[0] = 0;
  22.     for (int i = 0; i < m; i++) {
  23.         int x, y, value;
  24.         cin >> x >> y >> value;
  25.         g[x - 1][y - 1] = value;
  26.         g[y - 1][x - 1] = value;
  27.     }
  28.     for (int i = 0; i < n; i++) {
  29.         int new_v = -1;
  30.         for (int j = 0; j < n; j++) {
  31.             if (used[j] != 1 && (new_v == -1 || edge_to[j] < edge_to[new_v])) {
  32.                 new_v = j;
  33.             }
  34.         }
  35.         used[new_v] = true;
  36.         for (int to = 0; to < n; to++) {
  37.             if (g[new_v][to] < edge_to[to]) {
  38.                 edge_to[to] = g[new_v][to];
  39.             }
  40.         }
  41.     }
  42.  
  43.     for (int i = 0; i < n; i++) {
  44.         res += edge_to[i];
  45.     }
  46.     cout << res;
  47. }
  48.  
  49. //2
  50. #include<iostream>
  51. using namespace std;
  52. int p[1000000];
  53. int w[1000000];
  54.  
  55.  
  56.  
  57. int find_set(int v){
  58.     if (v == p[v])
  59.         return v;
  60.     return p[v] = find_set(p[v]); // сжатие пути
  61. }
  62.  
  63. void union_sets(int a, int b, int c){
  64.     a = find_set(a);
  65.     b = find_set(b);
  66.     if (a != b){
  67.         p[b] = a;
  68.         w[a] += w[b];
  69.     }
  70.     w[a] += c;
  71. }
  72. void make_set(int v){
  73.     p[v] = v;
  74. }
  75. int main() {
  76.     int n, m;
  77.     cin >> n >> m;
  78.     for (int i = 0; i < n; i++){
  79.         make_set(i);
  80.     }
  81.     for (int i = 0; i < m; i++){
  82.         int a;
  83.         cin >> a;
  84.         if (a == 2){
  85.             int x;
  86.             cin >> x;
  87.             x--;
  88.             cout << w[find_set(x)] << endl;
  89.  
  90.         } else {
  91.             int x, y, z;
  92.             cin >> x >> y >> z;
  93.             x--; y--;
  94.             union_sets(x, y, z);
  95.         }
  96.     }
  97. }
  98.  
  99.  
Advertisement
Add Comment
Please, Sign In to add comment