Submission #1219907

#TimeUsernameProblemLanguageResultExecution timeMemory
1219907sanoFactories (JOI14_factories)C++20
100 / 100
2486 ms342160 KiB
#include "factories.h" #include<iostream> #include<vector> #include<queue> #include<deque> #include<string> #include<fstream> #include<algorithm> #include <iomanip> #include<map> #include <set> #include <unordered_map> #include <stack> #include <unordered_set> #include <cmath> #include <cstdint> #include <cassert> #include <bitset> #include <random> #include <chrono> #include <cstring> #define ll long long #define ld long double //#define int ll #define For(i, n) for(ll i = 0; i < (ll)n; i++) #define ffor(i, a, n) for(ll i = (ll)a; i < (ll)n; i++) #define rfor(i, n) for(ll i = (ll)n; i >= (ll)0; i--) #define rffor(i, a, n) for(ll i = (ll)n; i >= (ll)a; i--) #define vec vector #define ff first #define ss second #define pb push_back #define pii pair<ll, ll> #define pld pair<ld, ld> #define NEK 2000000000000000 #define mod 1000000007 #define mod2 1000000009 #define rsz resize #define prv 43 #define prv2 47 #define D 8 #define trav(a,x) for (auto& a: x) #define pb push_back #define ub upper_bound #define lb lower_bound #define all(x) (x).begin(), (x).end() #define sig 0.0000001 using namespace std; vec<vec<pii>> g; vec<vec<pii>> pred; vec<bool> je; vec<ll> podst; vec<ll> hod; void vpodst(ll x, ll pr = -1) { podst[x] = 1; for (auto &i : g[x]) { if (i.ff == pr || je[i.ff]) continue; vpodst(i.ff, x); podst[x] += podst[i.ff]; } return; } ll centroid(ll x, ll vel, ll pr = -1) { for (auto &i : g[x]) { if (je[i.ff] || i.ff == pr) continue; if (podst[i.ff] * 2 > vel) { return centroid(i.ff, vel, x); } } return x; } void pocitaj_pred(ll x, ll c, ll pr = -1, ll dist = -1) { pred[x].push_back({ c, dist }); for (auto i : g[x]) { if (je[i.ff] || i.ff == pr) continue; pocitaj_pred(i.ff, c, x, dist + i.ss); } return; } void build_centroid(ll x = 0) { vpodst(x); ll c = centroid(x, podst[x]); je[c] = 1; for (auto &i : g[c]) { if (je[i.ff]) continue; pocitaj_pred(i.ff, c, c, i.ss); build_centroid(i.ff); } return; } void Init(int n2, int a2[], int b2[], int d2[]) { ll n = n2; vec<ll> a, b, d; For(i, n - 1) { a.push_back(a2[i]); b.push_back(b2[i]); d.push_back(d2[i]); } g.resize(n); hod.resize(n, NEK); podst.resize(n, 1); For(i, n-1) { g[a[i]].push_back({ b[i], d[i] }); g[b[i]].push_back({ a[i], d[i] }); } pred.resize(n); je.resize(n, 0); build_centroid(); } ll Query(int s2, int x2[], int t2, int y2[]) { ll s = s2, t = t2; vec<ll> x, y; For(i, s) x.push_back(x2[i]); For(i, t) y.push_back(y2[i]); For(i, s) { hod[x[i]] = 0; for (auto &j : pred[x[i]]) { hod[j.ff] = min(hod[j.ff], j.ss); } } ll mini = NEK; For(i, t) { mini = min(mini, hod[y[i]]); for (auto& j : pred[y[i]]) { mini = min(mini, hod[j.ff] + j.ss); } } For(i, s) { hod[x[i]] = NEK; for (auto& j : pred[x[i]]) { hod[j.ff] = NEK; } } return mini; } /* signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; int q; cin >> q; int a[100], b[100], d[100]; For(i, n - 1) { cin >> a[i] >> b[i] >> d[i]; } Init(n, a, b, d); For(i, q) { int s, t; cin >> s >> t; int x[100], y[100]; For(j, s) { cin >> x[j]; } For(j, t) { cin >> y[j]; } cout << Query(s, x, t, y) << '\n'; } return 0; }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...