제출 #1354238

#제출 시각아이디문제언어결과실행 시간메모리
1354238anteknne항공 노선도 (JOI18_airline)C++20
100 / 100
114 ms26428 KiB
#include "Alicelib.h"
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;

#define pb push_back
#define pii pair<int, int>
#define pll pair<ll, ll>
#define st first
#define nd second
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define debug false

const int K = 10;
vector<pii> kraw = {};

void Alice (int n, int m, int A[], int B[]) {
    for (int i = 0; i < m; i++) {
        kraw.pb({A[i] + 1, B[i] + 1});
    }

    for (int i = 1; i <= n; i ++) {
        for (int j = 0; j < K; j ++) {
            if (i & (1 << j)) {
                kraw.pb({i, n + j + 1});
            }
        }
    }

    for (int i = 0; i < K - 1; i ++) {
        kraw.pb({n + i + 1, n + i + 2});
    }
    kraw.pb({n + 2, n + K});


    for (int i = 1; i <= n; i ++) {
        kraw.pb({i, n + K + 1});
    }
    kraw.pb({n + K + 1, n + K + 2});

    int x = int(kraw.size());
    InitG(n + 12, x);

    for (int i = 0; i < x; i ++) {
        MakeG(i, kraw[i].st - 1, kraw[i].nd - 1);
    }
}
#include "Boblib.h"
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;

#define pb push_back
#define pii pair<int, int>
#define pll pair<ll, ll>
#define st first
#define nd second
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define debug false

const int MAXN = 1000 + 67;
const int K = 10;
vector<pii> kraw2;
vector<int> graf[MAXN];
bool w[MAXN];
bool licz[MAXN];
vector<int> akt;
bool odw[MAXN];
int co[MAXN];

void Bob (int v, int u, int C[], int D[]){
	int n = v - 12;

	if (n == 1) {
        InitMap(1, 0);
        return;
	}

    for (int i = 0; i < u; i ++) {
        //cout << C[i] + 1 << " " << D[i] + 1 << "\n";
        graf[C[i] + 1].pb(D[i] + 1);
        graf[D[i] + 1].pb(C[i] + 1);
    }

    int s = 1;
    for (int i = 1; i <= v; i ++) {
        if (int(graf[i].size()) == 1) {
            s = i;
            break;
        }
    }
    int p = graf[s][0];

    for (auto x : graf[p]) {
        w[x] = 1;
    }

    for (int i = 1; i <= v; i ++) {
        if (!w[i] && i != s && i != p) {
            licz[i] = 1;
        }
    }

    int zer;
    int jed;
    for (int i = 1; i <= v; i ++) {
        if (!licz[i]) {
            continue;
        }
        int cnt = 0;
        for (auto x : graf[i]) {
            if (licz[x]) {
                cnt ++;
                jed = x;
            }
        }
        if (cnt == 1) {
            zer = i;
            break;
        }
    }

    akt.pb(zer);
    akt.pb(jed);
    odw[zer] = 1;
    odw[jed] = 1;
    for (int i = 0; i < K - 2; i ++) {
        int v = -1;
        for (auto x : graf[akt.back()]) {
            if (!licz[x]) {
                continue;
            }
            if (odw[x]) {
                continue;
            }
            if (v == -1) {
                v = x;
            } else if (int(graf[x].size()) > int(graf[v].size())) {
                v = x;
            }
        }
        akt.pb(v);
        odw[v] = 1;
    }

    for (int i = 0; i < K; i ++) {
        for (auto x : graf[akt[i]]) {
            if (licz[x]) {
                continue;
            }
            co[x] += (1 << i);
        }
    }

    for (int i = 0; i < u; i ++) {
        if (co[C[i] + 1] != 0 && co[D[i] + 1] != 0) {
            kraw2.pb({co[C[i] + 1] - 1, co[D[i] + 1] - 1});
        }
    }

    InitMap(n, int(kraw2.size()));

    for (auto x : kraw2) {
        //cout << x.st << " " << x.nd << "\n";
        MakeMap(x.st, x.nd);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...