제출 #1148964

#제출 시각아이디문제언어결과실행 시간메모리
1148964weakweakweakMeetings (JOI19_meetings)C++20
29 / 100
257 ms16404 KiB
#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
#define fs first 
#define sc second

int n;
vector<int> a[2010];
vector<pii> ans;

void solve (int rt, vector<int> v) {
    for (int i : v) {
        bool y = 1;
        for (int j : v) if (i != j and !(a[i][j] == i or a[i][j] == rt)) y = 0;
        if (y) {
            // cout << "!" << rt << ' ' << i << '\n';
            ans.push_back(make_pair(rt, i));
            vector<int> v2;
            for (int j : v) if (i != j and a[i][j] == i) v2.push_back(j);
            solve(i, v2);
        }
    }
}

void Solve(int N) {
    n = N;
    ans.clear();
    for (int i = 0; i <= n; i++) a[i].resize(n+5);
    assert(n<=350);
    for (int i = 1; i < n; i++) for (int j = 1; j < n; j++) {
        if (i == j) continue;
        if (i > j) {
            a[i][j] = a[j][i];
            continue;
        }
        a[i][j] = Query(0, i, j);
    }
    vector<int> v;
    for (int i = 1; i < n; i++) v.push_back(i);

    solve(0, v);

    for (pii p : ans) {
        if (p.fs > p.sc) swap(p.fs, p.sc);
        Bridge(p.fs, p.sc);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...