Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- const char INFILE[] = "zapada.in";
- const char OUTFILE[] = "zapada.out";
- const int NMAX = 100 + 1;
- const int MMAX = 100 * 50 + 1;
- struct Muchie { int nod1, nod2, cost; } v[MMAX];
- int t[NMAX];
- inline bool Cmp(Muchie a, Muchie b)
- {
- return a.cost < b.cost;
- }
- inline int Radacina(int a)
- {
- int b, r = a;
- while (t[r] != r) r = t[r];
- while (t[a] != a) b = t[a], t[a] = r, a = b;
- return r;
- }
- int main()
- {
- freopen(INFILE, "r", stdin);
- freopen(OUTFILE, "w", stdout);
- int n, m;
- scanf("%d%d", &n, &m);
- for (int i = 1; i <= m; ++i) scanf("%d%d%d", &v[i].nod1, &v[i].nod2, &v[i].cost);
- for (int i = 1; i <= n; ++i) t[i] = i;
- int k, x, sum = 0;
- scanf("%d", &k);
- for (int i = 1; i <= k; ++i) scanf("%d", &x), sum += v[x].cost, v[x].cost = 0;
- sort(v + 1, v + m + 1, Cmp);
- int r1, r2, nr_arb = 1;
- for (int i = 1; nr_arb < n; ++i) {
- r1 = Radacina(v[i].nod1);
- r2 = Radacina(v[i].nod2);
- if (r1 == r2) continue;
- t[r2] = r1;
- sum += v[i].cost;
- ++nr_arb;
- }
- printf("%d", sum);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement