제출 #1165826

#제출 시각아이디문제언어결과실행 시간메모리
1165826Muhammet통행료 (APIO13_toll)C++20
0 / 100
0 ms320 KiB
#include "bits/stdc++.h" using namespace std; #define ff first #define ss second #define ll long long ll n, m, k, an; vector <int> p, a, h; vector <vector <pair <int, int>>> v; vector <pair <int, int>> blue; void clr(vector <int> &p) { p.resize(n+1); for(int i = 1; i <= n; i++) { p[i] = i; } } int fnd(int x) { if(p[x] == x) return p[x]; return p[x] = fnd(p[x]); } void dfs(int x, int y) { h[x] = h[y] + 1; for(auto i : v[x]) { if(i.ff != y) dfs(i.ff, x); } } void upd(int a1, int b1, int w) { h.assign(n+1, 0); dfs(1, 0); if(h[b1] > h[a1]) swap(b1, a1); int x = a1, y = b1; while(h[a1] > h[b1]) { for(auto &i : v[a1]) { if(i.ff == x) i.ss = min(i.ss, w); } x = a1; for(auto i : v[a1]) { if(h[i.ff] < h[a1]) { a1 = i.ff; break; } } } while(a1 != b1) { for(auto &i : v[a1]) { if(i.ff == x) i.ss = min(i.ss, w); } for(auto &i : v[b1]) { if(i.ff == y) i.ss = min(i.ss, w); } x = a1, y = b1; for(auto i : v[a1]) { if(h[i.ff] < h[a1]) { a1 = i.ff; break; } } for(auto i : v[b1]) { if(h[i.ff] < h[b1]) { b1 = i.ff; break; } } } for(auto &i : v[b1]) { if(i.ff == x or i.ff == y) i.ss = min(i.ss, w); } } void f(int x, int y, ll w) { an += (w * a[x]); for(auto i : v[x]) { if(i.ff == y) continue; f(i.ff, x, w + i.ss); } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m >> k; vector <pair <int, pair <int, int>>> vc, vc1; for(int i = 1; i <= m; i++) { int u1, u2, c; cin >> u1 >> u2 >> c; vc.push_back({c, {u1, u2}}); } sort(vc.begin(), vc.end()); clr(p); for(int i = 0; i < m; i++) { int a1 = fnd(vc[i].ss.ff), b1 = fnd(vc[i].ss.ss); if(a1 == b1) continue; p[b1] = a1; vc1.push_back(vc[i]); } vc = vc1; blue.resize(k); for(int i = 0; i < k; i++) { cin >> blue[i].ff >> blue[i].ss; } a.resize(n+1); for(int i = 1; i <= n; i++) { cin >> a[i]; } ll ans = 400; // for(int mask = 0; mask < (1<<k); mask++) { // clr(p); // bool tr = 0; // v.clear(); // v.resize(n+1); // for(int i = 0; i < k; i++) { // if((mask>>i)&1) { // int a1 = fnd(blue[i].ff), b1 = fnd(blue[i].ss); // if(a1 == b1) { // tr = 1; // break; // } // p[b1] = a1; // v[blue[i].ff].push_back({blue[i].ss, 1e9}); // v[blue[i].ss].push_back({blue[i].ff, 1e9}); // } // } // if(tr) continue; // for(auto i : vc) { // int a1 = fnd(i.ss.ff), b1 = fnd(i.ss.ss); // if(a1 != b1) { // p[b1] = a1; // v[i.ss.ff].push_back({i.ss.ss, 0}); // v[i.ss.ss].push_back({i.ss.ff, 0}); // } // else { // upd(i.ss.ff, i.ss.ss, i.ff); // } // } // an = 0; // f(1, 0, 0); // ans = max(ans, an); // } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...