제출 #201434

#제출 시각아이디문제언어결과실행 시간메모리
201434dimash241Meetings (JOI19_meetings)C++17
100 / 100
1203 ms1068 KiB
//#pragma GCC target("avx2") //#pragma GCC optimize("O3") //# include <x86intrin.h> #include "meetings.h" # include <bits/stdc++.h> # include <ext/pb_ds/assoc_container.hpp> # include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; template<typename T> using ordered_set = tree <T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define _USE_MATH_DEFINES_ #define ll long long #define ld long double #define Accepted 0 #define pb push_back #define mp make_pair #define sz(x) (int)(x.size()) #define every(x) x.begin(),x.end() #define F first #define S second #define lb lower_bound #define ub upper_bound #define For(i,x,y) for (ll i = x; i <= y; i ++) #define FOr(i,x,y) for (ll i = x; i >= y; i --) #define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0) // ROAD to... Red inline void Input_Output () { //freopen(".in", "r", stdin); //freopen(".out", "w", stdout); } const int dx[] = {-1, 0, 1, 0}; const int dy[] = {0, -1, 0, 1}; int n, m, k; vector < int > g[2020]; int e[2020][2020]; int deg[2020]; int u[2020]; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); void Bridge (int, int); int Query (int, int, int); int opera = 0; map < pair < int, int > , int > was; void PrintOut(int a, int b) { if (a > b) swap(a, b); opera++; if (opera == n) { assert(0); } // cerr << ' ' << a << ' ' << b << ' ' << opera << '\n'; // if (opera == 1) exit(0); Bridge(a, b); } void reduce (vector < int > &v) { sort(every(v)); v.resize(unique(every(v)) - v.begin()); random_shuffle(every(v)); } void go (int v) { if (g[v].empty()) return; // reduce(g[v]); vector < int > cur; cur.swap(g[v]); int len = cur.size(); int y = cur[rng() % len]; int x = v; set < int > s; s.insert(v); s.insert(y); for (int z : cur) if (z != y) { // cout << x << ' ' << y << ' ' << z << '\n'; int t = Query(x, y, z); s.insert(t); if (t != z) g[t].pb(z); } //exit(0); vector < int > ord(s.begin(), s.end()); // for (auto it : ord) cout << it << ' '; // exit(0); sort(every(ord), [&](int y, int z) { return (x == y) || ((x != z) && Query(x, y, z) == y); } ); // cout << sz(ord); // exit(0); for (int i = 1; i < sz(ord); ++i) { PrintOut(ord[i-1], ord[i]); } for (auto it : ord) go(it); } void Solve(int N) { n = N; opera = 0; for (int i = 1; i < n; ++i) g[0].pb(i); go(0); } /* namespace { const int MAX_N = 2000; const int MAX_CALLS = 100000; void WrongAnswer(int code) { printf("Wrong Answer [%d]\n", code); exit(0); } int N, num_calls; std::vector<int> graph[MAX_N]; std::set<std::pair<int, int>> edges, edges_reported; int weight[MAX_N]; bool Visit(int p, int e, int rt = -1) { if (p == e) { ++weight[p]; return true; } for (int q : graph[p]) { if (q != rt) { if (Visit(q, e, p)) { ++weight[p]; return true; } } } return false; } } // namespace int Query(int u, int v, int w) { if (!(0 <= u && u <= N - 1 && 0 <= v && v <= N - 1 && 0 <= w && w <= N - 1 && u != v && u != w && v != w)) { WrongAnswer(1); } if (++num_calls > MAX_CALLS) { WrongAnswer(2); } std::fill(weight, weight + N, 0); Visit(u, v); Visit(u, w); Visit(v, w); for (int x = 0; x < N; ++x) { if (weight[x] == 3) { return x; } } printf("Error: the input may be invalid\n"); exit(0); } void Bridge(int u, int v) { if (!(0 <= u && u < v && v <= N - 1)) { WrongAnswer(3); } if (!(edges.count(std::make_pair(u, v)) >= 1)) { WrongAnswer(4); } if (!(edges_reported.count(std::make_pair(u, v)) == 0)) { WrongAnswer(5); } edges_reported.insert(std::make_pair(u, v)); } int main() { if (scanf("%d", &N) != 1) { fprintf(stderr, "Error while reading input\n"); exit(1); } for (int i = 0; i < N - 1; ++i) { int u, v; if (scanf("%d%d", &u, &v) != 2) { fprintf(stderr, "Error while reading input\n"); exit(1); } graph[u].push_back(v); graph[v].push_back(u); edges.insert(std::make_pair(u, v)); } num_calls = 0; Solve(N); if (edges_reported.size() != static_cast<size_t>(N - 1)) { WrongAnswer(6); } printf("Accepted: %d\n", num_calls); return 0; } // B...a */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...