제출 #1171382

#제출 시각아이디문제언어결과실행 시간메모리
1171382M_W_13Meetings (JOI19_meetings)C++20
100 / 100
802 ms2668 KiB
#include "meetings.h" #include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (n); i++) typedef long long ll; #define pb push_back #define st first #define nd second void bridge(int a, int b) { Bridge(min(a, b), max(a, b)); } void posortuj(vector<int> sciezka, int korzen, int last) { int sz = sciezka.size(); // rep(i, sz) { // cout << sciezka[i] << " "; // } // cout << '\n'; // cout << "korzen ze sciezka = " << korzen << '\n'; // cout << "last = " << last << '\n'; vector<int> ans; rep(i, sz) { int v = sciezka[i]; int poc = 0; int rozm = ans.size(); int kon = rozm; int odp = rozm; while (poc < kon) { int sr = (poc + kon)/2; int w = ans[sr]; if (Query(korzen, v, w) == v) { odp = sr; kon = sr; } else { poc = sr + 1; } } vector<int> ans2; rep(j, odp) { ans2.pb(ans[j]); } ans2.pb(v); for (int j = odp; j < rozm; j++) { ans2.pb(ans[j]); } ans = ans2; } // rep(i, sz) { // cout << ans[i] << " "; // } // cout << '\n'; if (sz > 0) { bridge(korzen, ans[0]); bridge(ans[sz - 1], last); } else { bridge(korzen, last); } // cout << "PLS" << '\n'; rep(i, sz - 1) { bridge(ans[i], ans[i + 1]); } // cout << "SKULL" << '\n'; } void rozw(vector<int> wierzcholki, int korzen) { int sz = wierzcholki.size(); // rep(i, sz) { // cout << wierzcholki[i] << " "; // } // cout << '\n'; // cout << "korzen = " << korzen << '\n'; if (sz == 0) { return ; } if (sz == 1) { bridge(wierzcholki[0], korzen); return; } int los = rand() % sz; int v = wierzcholki[los]; vector<int> pom[2002]; vector<int> sciezka; rep(i, sz) { if (i == los) continue; int w = wierzcholki[i]; int lca = Query(korzen, v, w); if (lca == w) { sciezka.pb(w); } else { pom[lca].pb(w); } } posortuj(sciezka, korzen, v); rep(i, 2002) { int sz = pom[i].size(); if (sz == 0) { continue; } rozw(pom[i], i); } } void Solve(int N) { vector<int> v; int los = rand() % N; rep(i, N) { if (i == los) continue; v.pb(i); } rozw(v, los); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...