제출 #724409

#제출 시각아이디문제언어결과실행 시간메모리
724409PixelCatSplit the Attractions (IOI19_split)C++14
7 / 100
515 ms1048576 KiB
#include "split.h"
#ifdef NYAOWO
#include "grader.cpp"
#endif

#include <bits/stdc++.h>
#define For(i, a, b) for(int i = a; i <= b; i++)
#define Forr(i, a, b) for(int i = a; i >= b; i--)
#define F first
#define S second
#define eb emplace_back
#define sz(x) ((int)x.size())
#define all(x) x.begin(), x.end()
// #define int LL
using namespace std;
using LL = long long;
using pii = pair<int, int>;

const int MAXN = 200010;

vector<int> adj[MAXN];

vector<int> ord;
void dfs(int n, int p, int k) {
    ord.eb(n);
    for(auto &i:adj[n]) if(i != p && i != k) {
        dfs(i, n, k);
    }
}

vector<int32_t> find_split(int32_t n, int32_t a, int32_t b, int32_t c, vector<int32_t> p, vector<int32_t> q) {
    int m = sz(p);
    For(i, 0, m - 1) {
        int s = p[i];
        int t = q[i];
        adj[s].eb(t);
        adj[t].eb(s);
    }

    int p0 = -1;
    For(i, 0, n - 1) if(sz(adj[i]) == 1) {
        p0 = i;
    }
    if(p0 < 0) p0 = 0;
    dfs(p0, p0, p0);
    vector<int> res(n);
    For(i, 0, n - 1) {
        int id = ord[i];
        if(i < a) res[id] = 1;
        else if(i < a + b) res[id] = 2;
        else res[id] = 3;
    }
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...