Advertisement
Emiliatan

b181

Mar 13th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. /* b181            */
  2. /* AC (2ms, 264KB) */
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <set>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. struct edge_
  11. {
  12.     int from, to, wi;
  13. }edge[101];
  14.  
  15. int dij[12], n, m, edgeCnt, totCost;
  16. set<pair<int,int> > ans;
  17. set<int> nodeCnt;
  18.  
  19. bool cmp(const edge_ &a, const edge_ &b)
  20. {
  21.     return (a.wi < b.wi);
  22. }
  23. inline int find(int x)
  24. {
  25.     return (dij[x] == x ? x : dij[x] = find(dij[x]));
  26. }
  27.  
  28. int main()
  29. {
  30.     while(~scanf("%d %d", &n, &m) && getchar())
  31.     {
  32.         totCost = edgeCnt = 0;
  33.         ans.clear();
  34.         for(int i = 1; i <= n; i++)
  35.             dij[i] = i;
  36.         for(int f, t, w; edgeCnt < m; edgeCnt++)
  37.         {
  38.             getchar(); scanf("%d", &f);
  39.             getchar(); getchar(); scanf("%d", &t);
  40.             getchar(); scanf("%d", &w); getchar();
  41.             nodeCnt.emplace(f); nodeCnt.emplace(t);
  42.             edge[edgeCnt].from = f, edge[edgeCnt].to = t, edge[edgeCnt].wi = w;
  43.         }
  44.         sort(edge, edge + edgeCnt, cmp);
  45.         n = nodeCnt.size();
  46.         for(int i = 0, r1, r2; i < edgeCnt && ans.size() < n - 1; i++)
  47.         {
  48.             r1 = find(edge[i].from);
  49.             r2 = find(edge[i].to);
  50.             if(r1 != r2)
  51.             {
  52.                 totCost += edge[i].wi;
  53.                 ans.emplace(edge[i].from, edge[i].to);
  54.                 dij[r1] = r2;
  55.                 find(r1);
  56.             }
  57.         }
  58.         for(auto it : ans)
  59.             printf("(W%d W%d) ", it.first, it.second);
  60.         putchar('\n');
  61.         printf("%d\n",totCost);
  62.     }
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement