vadimk772336

Без принтов, работает

Dec 19th, 2021
959
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3.  
  4. struct edge
  5. {
  6.     int idx;
  7.     int a;
  8.     int b;
  9.     int cost;
  10. };
  11.  
  12. struct vertex
  13. {
  14.     bool visited = false;
  15.     std::vector<struct edge> adj_list = {};
  16.     int count_edges = 0;
  17. };
  18.  
  19. void addEdge(int i, int j, int cost, std::vector<vertex>& vertexes)
  20. {
  21.     edge buff;
  22.  
  23.     buff.idx = j;
  24.     buff.cost = cost;
  25.     buff.a = i;
  26.     buff.b = j;
  27.  
  28.     vertexes[i].adj_list.push_back(buff);
  29.  
  30.     buff.idx = i;
  31.     vertexes[j].adj_list.push_back(buff);
  32.  
  33.     vertexes[i].count_edges++;
  34.     vertexes[j].count_edges++;
  35. }
  36.  
  37.  
  38. struct Compare
  39. {
  40.     bool operator()(edge& o1, edge& o2) const
  41.     {
  42.         return o1.cost > o2.cost;
  43.     }
  44. };
  45.  
  46. void showpq(std::priority_queue<struct edge, std::vector<struct edge>, Compare> gq)
  47. {
  48.     std::priority_queue<struct edge, std::vector<struct edge>, Compare> g = gq;
  49.     while (!g.empty())
  50.     {
  51.         std::cout << '\t' << g.top().cost;
  52.         g.pop();
  53.     }
  54.     std::cout << '\n';
  55. }
  56.  
  57. int main()
  58. {
  59.     std::priority_queue<struct edge, std::vector<struct edge>, Compare> heap;
  60.  
  61.     int n, m;
  62.     std::cin >> n >> m;
  63.  
  64.     int a, b, c;
  65.     std::vector<struct vertex> vertexes(n);
  66.     struct edge EDG2;
  67.  
  68.     for (int i = 0; i < m; ++i)
  69.     {
  70.         std::cin >> a >> b >> c;
  71.  
  72.         addEdge(a - 1, b - 1, c, vertexes);
  73.  
  74.         if (a == 1 | b == 1)
  75.         {
  76.             EDG2.a = a - 1;
  77.             EDG2.b = b - 1;
  78.             EDG2.cost = c;
  79.             heap.push(EDG2);
  80.         }
  81.     }
  82.  
  83.     vertexes[0].visited = true;
  84.     struct edge EDG;
  85.     int new_vertex;
  86.     int max = 0;
  87.  
  88.     for (int i = 0; i < n - 1; ++i)
  89.     {
  90.  
  91.         EDG = heap.top();
  92.  
  93.         heap.pop();
  94.  
  95.         if (max < EDG.cost)
  96.             max = EDG.cost;
  97.  
  98.         if (vertexes[EDG.a].visited)
  99.         {
  100.             new_vertex = EDG.b;
  101.             vertexes[new_vertex].visited = true;
  102.         }
  103.         else
  104.         {
  105.             new_vertex = EDG.a;
  106.             vertexes[new_vertex].visited = true;
  107.         }
  108.  
  109.  
  110.         for (int j = 0; j < vertexes[new_vertex].count_edges; ++j)
  111.         {
  112.             EDG = vertexes[new_vertex].adj_list[j];
  113.  
  114.             if (not vertexes[EDG.idx].visited)
  115.                 heap.push(EDG);
  116.         }
  117.     }
  118.  
  119.     std::cout << max;
  120.    
  121.     return 0;
  122. }
  123.  
Advertisement
Add Comment
Please, Sign In to add comment