Submission #1184679

#TimeUsernameProblemLanguageResultExecution timeMemory
1184679ElyesChaabouniAirline Route Map (JOI18_airline)C++20
0 / 100
40 ms11148 KiB
#include "Alicelib.h"
#include <cassert>
#include <cstdio>
#include <bits/stdc++.h>

using namespace std;

static int cnt;

void Alice(int N, int M, int A[], int B[]) {
    cnt = 0;
    InitG(2 * N, M + (N * (N + 1) / 2));
    
    //1
    for (int i = 0; i < M; i++) {
        if (A[i] < B[i])
            MakeG(cnt++, A[i], B[i]);
        else
            MakeG(cnt++, B[i], A[i]);
    }
    
    //2
    for (int i = N, tmp = 0; i < 2 * N; tmp++, i++) {
        //spc
        for (int j = N; j < i; j++) {
            MakeG(cnt++, i, j);
        }
        MakeG(cnt++, i, tmp);
    }
}
#include "Boblib.h"
#include <cassert>
#include <cstdio>
#include <bits/stdc++.h>

using namespace std;

static int n;
static int m;
static vector<set<int>> arr;
static vector<bool> spc;
static vector<int> occ;
static map<int, int> mp;

void Bob(int V, int U, int C[], int D[]) {
    n = V / 2;
    m = U - (n * (n + 1) / 2);
    arr.resize(V);
    spc.assign(V, false);
    occ.assign(V, 0);
    mp.clear();
    
    InitMap(n, m);
    
    //arr
    for (int i = 0; i < U; i++) {
        arr[C[i]].insert(D[i]);
        occ[D[i]]++;
    }
    //spc n°1
    for (int i = 0; i < V; ++i) {
        if (arr[i].size() == 1) {
            for (auto &elt: arr[i]) {
                if (occ[elt] == 1) {
                    spc[i] = true;
                }
            }
        }
    }
    //spc n°2 -> n°N
    for (int i = 0; i < V; ++i) {
        for (auto &elt: arr[i]) {
            if (spc[elt]) {
                spc[i] = true;
            }
        }
    }
    //spc 2
    for (int i = 0; i < V; ++i) {
        if (spc[i]) {
            int cnt = 0, x = -1;
            for (auto &elt: arr[i]) {
                if (spc[elt])
                    cnt++;
                else
                    x = elt;
            }
            mp[x] = cnt;
        }
    }
    
    //ans
    for (int i = 0; i < U; i++) {
        if (mp.count(C[i]) && mp.count(D[i])) {
            MakeMap(mp[C[i]], mp[D[i]]);
        }
    }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...