Submission #205269

#TimeUsernameProblemLanguageResultExecution timeMemory
205269egekabasMeetings (JOI19_meetings)C++14
29 / 100
3089 ms3576 KiB
#include <bits/stdc++.h>
#include "meetings.h"
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long   ll;
typedef unsigned long long   ull;
typedef long double ld;
typedef pair<ll, ll>    pll;
typedef pair<ull, ull>    pull;
typedef pair<int, int>  pii;
typedef pair<ld, ld>  pld;
int p[2009];
vector<int> sub[2009];
int done[2009];
vector<int> cur;
int prt[2009];

void dfs(int v){
    done[v] = 1;
    for(auto u : sub[v])
        if(done[u] == 0)
            dfs(u);
    cur.pb(v);
}
void calc(vector<int> all){
    if(all.size() <= 1) return;
    vector<vector<int>> groups;
    int root = all.back();
    done[root] = 1;
    for(auto u : all){
        if(done[u]) continue;
        for(auto &v : groups){
            int tmp = Query(root, v.back(), u);
            if(tmp == root)
                continue;
            if(u != tmp)
                sub[tmp].pb(u);
            if(v.back() != tmp)
                sub[tmp].pb(v.back());
            cur.clear();
            dfs(tmp);
            v.insert(v.end(), cur.begin(), cur.end());
            break;
        }
        if(done[u] == 0){
            cur.clear();
            dfs(u);
            groups.pb(cur);
        }
    }
    for(auto u : all) done[u] = 0;
    for(auto v : groups){
        p[v.back()] = root;
        calc(v);
    }
}
    
void Solve(int n){
    vector<int> all;
    for(int i = n-1; i >= 0; --i)
        all.pb(i);
    calc(all);
    for(int i = 1; i < n; ++i){
        //cout << i << ' ' << p[i] << '\n';
        Bridge(min(i, p[i]), max(i, p[i]));
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...