Advertisement
a53

Zapada

a53
Feb 6th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. #include <cstdio>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. const char INFILE[] = "zapada.in";
  6. const char OUTFILE[] = "zapada.out";
  7.  
  8. const int NMAX = 100 + 1;
  9. const int MMAX = 100 * 50 + 1;
  10.  
  11. struct Muchie { int nod1, nod2, cost; } v[MMAX];
  12. int t[NMAX];
  13.  
  14. inline bool Cmp(Muchie a, Muchie b)
  15. {
  16. return a.cost < b.cost;
  17. }
  18.  
  19. inline int Radacina(int a)
  20. {
  21. int b, r = a;
  22. while (t[r] != r) r = t[r];
  23. while (t[a] != a) b = t[a], t[a] = r, a = b;
  24.  
  25. return r;
  26. }
  27.  
  28. int main()
  29. {
  30. freopen(INFILE, "r", stdin);
  31. freopen(OUTFILE, "w", stdout);
  32.  
  33. int n, m;
  34. scanf("%d%d", &n, &m);
  35. for (int i = 1; i <= m; ++i) scanf("%d%d%d", &v[i].nod1, &v[i].nod2, &v[i].cost);
  36. for (int i = 1; i <= n; ++i) t[i] = i;
  37.  
  38. int k, x, sum = 0;
  39. scanf("%d", &k);
  40. for (int i = 1; i <= k; ++i) scanf("%d", &x), sum += v[x].cost, v[x].cost = 0;
  41.  
  42. sort(v + 1, v + m + 1, Cmp);
  43.  
  44. int r1, r2, nr_arb = 1;
  45. for (int i = 1; nr_arb < n; ++i) {
  46. r1 = Radacina(v[i].nod1);
  47. r2 = Radacina(v[i].nod2);
  48. if (r1 == r2) continue;
  49.  
  50. t[r2] = r1;
  51. sum += v[i].cost;
  52. ++nr_arb;
  53. }
  54.  
  55. printf("%d", sum);
  56.  
  57. return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement