제출 #1365645

#제출 시각아이디문제언어결과실행 시간메모리
1365645madamadam3BOI Acronym (BOI25_boi)C++20
12 / 100
52 ms16176 KiB
#include <bits/stdc++.h>
using namespace std;

struct DSU {
    int n; vector<int> par, sz;
    DSU(int n = 0) : n(n), par(n, -1), sz(n, 1) {}
    int find(int v) {return par[v] == -1 ? v : par[v] = find(par[v]);}
    void unite(int a, int b) {
        a = find(a); b = find(b);
        if (a != b) {
            if (sz[a] < sz[b]) swap(a,b);
            sz[a] += sz[b]; par[b] = a;
        }
    }
};

int main() {
    cin.tie(0)->sync_with_stdio(0);

    int n; cin >> n;
    vector<vector<int>> a(n, vector<int>(n));
    for (int i = 0; i < n; i++) for (int j = i; j < n; j++) cin >> a[i][j];

    auto dsu = DSU(n);
    for (int i = 0; i < n-1; i++) {
        if (a[i][i] < a[i][i+1]) dsu.unite(i, i+1);
    }

    int p = 0;
    vector<int> p1, p2;
    for (int i = 0; i < n; i++) {
        if (i > 0 && dsu.find(i) != dsu.find(i-1)) p = 1-p;
        if (p == 0) p1.push_back(i+1);
        else p2.push_back(i+1);
    }
    
    if (p1.size() < p2.size()) swap(p1, p2);
    for (auto x : p1) cout << x << " "; cout << "\n";
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…