Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define pb push_back
- #define eb emplace_back
- #define mk make_pair
- #define fi first
- #define se second
- #define loop(x) for (int i = 0;i < x;i++)
- #define each(x, xs) for (auto& x : xs)
- #define iter(a) a.begin(), a.end()
- typedef long long ll;
- typedef pair<ll,ll> ii;
- typedef vector<ii> vii;
- typedef tuple<ll,ll,ll> ti;
- typedef vector<ti> vti;
- const ll INF = 1e18;
- const double PI = acos(-1.0);
- const int T = 1e5 + 5;
- vector<int> g[T];
- int ori[T];
- ll dist[T];
- vti aresta;
- priority_queue<ii, vii, greater<ii> >pq;
- int n,k,l;
- int dif(int a, int b) {
- int u = get<0>(aresta[b]);
- int v = get<1>(aresta[b]);
- if(u != a) return u;
- return v;
- }
- ll dij() {
- while(!pq.size()) {
- ii at = pq.top();
- pq.pop();
- int u = get<0>(aresta[at.se]);
- int v = get<1>(aresta[at.se]);
- int d = at.fi;
- int nxt;
- if(!ori[u]) ori[u] = ori[v], dist[u] = dist[v] + d, nxt = u;
- else if(!ori[v]) ori[v] = ori[u], dist[v] = dist[u] + d, nxt = v;
- else return (dist[u] + dist[v] + d);
- for(auto z : g[nxt]) {
- int pqp = dif(nxt,z);
- if(ori[pqp] != ori[nxt]) {
- }
- }
- }
- }
- int main() {
- ios_base::sync_with_stdio(false);
- memset(dist, INF, sizeof INF);
- cin >> n >> k >> l;
- for(int i = 0; i < n; i++) cin >> x, ori[x] = x;
- for(int i = 0; i < l; i++) {
- int a,b,c;
- cin >> a >> b >> c;
- if(ori[a] == a or ori[b] == b) pq.emplace(c,aresta.size());
- g[a].pb(aresta.size());
- g[b].pb(aresta.size());
- aresta.eb(a,b,c);
- }
- cout << 3ll*dij() << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement