Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #pragma comment(linker, "/stack:200000000")
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- #include <set>
- #include <map>
- #include <deque>
- #include <cmath>
- #include <queue>
- #include <random>
- #include <bitset>
- #include <time.h>
- #include <string>
- #include <chrono>
- #include <cstdio>
- #include <vector>
- #include <cstdlib>
- #include <iomanip>
- #include <cassert>
- #include <iostream>
- #include <algorithm>
- #include <unordered_map>
- #include <unordered_set>
- //++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
- #define itn int
- //#define endl '\n'
- #define mp make_pair
- #define pbc push_back
- #define pob pop_back()
- #define empb emplace_back
- #define sp system("pause")
- #define queuel queue<long long>
- #define matrix vector<vector<ll>>
- #define all(x) (x).begin(),(x).end()
- #define rall(x) (x).rbegin(),(x).rend()
- #define pin(p) cin >> p.first >> p.second;
- #define rev(v) reverse(v.begin(),v.end());
- #define mx(v) max_element(v.begin(), v.end());
- #define mn(v) min_element(v.begin(), v.end());
- #define dig(c) (c >=' 0' && c <= '9') ? 1 : 0
- #define sout(s, c) for(auto i : s) cout << i << c;
- #define pout(p) cout << p.first << " " << p.second;
- #define er(v, l, r) erase(v.begin() + l, v.begin() + r);
- #define vin(v) for(ll i = 0; i < v.size(); ++i) cin >> v[i];
- #define vout(v, c) for(int i = 0; i < v.size(); ++i) cout << v[i] << c;
- #define pushi(v, a) for(int i = 0; i < a.size(); ++i) v.push_back(a[i]);
- #define sin(s, n) for(int i = 0; i < n; ++i){int a; cin >> a; s.insert(a);}
- #define fastio() ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);
- //++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
- using namespace std;
- /*▄███████▀▀▀▀▀▀███████▄
- ░▐████▀▒ЗАПУСКАЕМ▒▀██████▄
- ░███▀▒▒▒▒▒ДЯДЮ▒▒▒▒▒▒▀█████
- ░▐██▒▒▒▒▒БОГДАНА▒▒▒▒▒████▌
- ░▐█▌▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒████▌
- ░░█▒▄▀▀▀▀▀▄▒▒▄▀▀▀▀▀▄▒▐███▌
- ░░░▐░░░▄▄░░▌▐░░░▄▄░░▌▐███▌
- ░▄▀▌░░░▀▀░░▌▐░░░▀▀░░▌▒▀▒█▌
- ░▌▒▀▄░░░░▄▀▒▒▀▄░░░▄▀▒▒▄▀▒▌
- ░▀▄▐▒▀▀▀▀▒▒▒▒▒▒▀▀▀▒▒▒▒▒▒█
- ░░░▀▌▒▄██▄▄▄▄████▄▒▒▒▒█▀
- ░░░░▄██████████████▒▒▐▌
- ░░░▀███▀▀████▀█████▀▒▌
- ░░░░░▌▒▒▒▄▒▒▒▄▒▒▒▒▒▒▐
- ░░░░░▌▒▒▒▒▀▀▀▒▒▒▒▒▒▒▐*/
- //++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
- typedef long long ll;
- typedef long double ld;
- typedef unsigned long long ull;
- //++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
- const ll INF = 1000LL * 1000 * 1000 * 1000 * 1000 * 1000;
- const ll inf = 1000 * 1000 * 1000;
- const ld PI = acos(-1.0);
- const ll mod1 = inf * inf + 1337 * 42 + 57 * 179 + 228;
- const ll mod2 = inf + 7;
- const ll bigmod = 1LL * inf * 100 + 3;
- const int MAXN = 300005;
- const ld EPS = 1e-10;
- const int N = 300228;
- ll hp = 1e6 + 3;
- ll ans = 0;
- struct edge
- {
- int a, b, c;
- };
- vector<int> p(MAXN);
- vector<int> rnk(MAXN);
- int na = 0;
- int us = 0;
- int c = 0;
- vector<int> u(MAXN);
- void make(int v)
- {
- p[v] = v;
- }
- int fin(int v)
- {
- return (v == p[v] ? v : p[v] = fin(p[v]));
- }
- void unite(int a, int b, int nw)
- {
- a = fin(a) ; b = fin(b);
- if (a^b)
- {
- if (rnk[a] < rnk[b])swap(a, b);
- p[b] = a;
- if (rnk[a] == rnk[b]) rnk[a] ++;
- if (u[a] && u[b])c++;
- if (c == us - 1)
- {
- for(int i =1;i<=us;++i)
- {
- cout << nw << ' ';
- }
- exit(0);
- }
- }
- }
- bool cmp(edge a, edge b)
- {
- return a.c < b.c;
- }
- signed main()
- {
- fastio();
- int n, m, k;
- cin >> n >> m >> k;
- for (int i = 0; i < k; ++i)
- {
- int x;
- cin >> x;
- u[x] = 1;
- }
- vector<edge> a;
- for (int i = 0; i < m; ++i)
- {
- int x, y, z;
- cin >> x >> y >> z;
- a.pbc({ x,y,z });
- }
- us = k;
- na = n;
- sort(all(a),cmp);
- for (int i = 1; i <= n; ++i)
- {
- make(i);
- if (u[i])rnk[i] = 1e8;
- }for (int i = 0; i < a.size(); ++i)
- {
- if (fin(a[i].a) != fin(a[i].b))
- {
- unite(a[i].a, a[i].b, a[i].c);
- }
- }
- sp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement