답안 #808504

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
808504 2023-08-05T07:23:41 Z drdilyor 슈퍼트리 잇기 (IOI20_supertrees) C++17
0 / 100
152 ms 24132 KB
#include<bits/stdc++.h>
#include "supertrees.h"
using namespace std;
using ll = long long;
const int inf = 1e9;

#ifdef ONPC
#define debug(args...) {cout << "[" << #args << "]: "; debug_out(args);}
#else
#define debug(args...) {42;}
#endif

void debug_out() {
    cout << endl;
}
template<typename H, typename... T>
void debug_out(vector<H> h, T... t) {
    cout << "{";
    for (H i : h) cout << i << ", ";
    cout << "}, ";
    debug_out(t...);
}
template<typename H, typename... T>
void debug_out(H h, T... t) {
    cout << h << ", ";
    debug_out(t...);
}

struct DSU {
    int n;
    vector<int> par;
    vector<vector<int>> set;
    DSU(int n) : n(n), par(n) {
        for (int i = 0; i < n; i++)
            par[i] = i, set.push_back({i});
    }
    void merge(int a, int b) {
        a = get(a), b = get(b);
        if (set[b].size() > set[a].size())
            swap(set[a], set[b]);
        par[b] = a;
        for (int e : set[b])
            set[a].push_back(e);
    }
    int get(int i) {
        return par[i] == i ? i : par[i] = get(par[i]);
    }
};

int construct(std::vector<std::vector<int>> p) {
	int n = p.size();
    vector ans(n, vector<int>(n));

    DSU cc1(n), cc(n);
    for (int i = 0;i  < n;i++)
        for (int j = 0; j < n; j++) {
            if (p[i][j] == 1)
                cc1.merge(i, j);
            if (p[i][j])
                cc.merge(i, j);
        }

    DSU rcc(n), rcc1(n);

    for (int i = 0; i < n; i++) {
        int j = cc1.get(i);
        if (j == i) continue;
        ans[i][j] = ans[j][i] = 1;
        rcc1.merge(i, j);
    }


    for (int i = 0; i < n; i++) {
        if (cc.get(i) != i) continue;
        vector<int> full{i};
        for (int j = 0; j < n; j++) {
            if (j == i) continue;
            if (cc.get(j) == cc.get(i))
                full.push_back(cc1.get(j));
        }
        debug(full);
        sort(full.begin(), full.end());
        full.erase(unique(full.begin(), full.end()), full.end());
        if (full.size() == 2) return 0;
        if (full.size() == 1) continue;
        int m = full.size();
        for (int j = 0; j < m; j++) {
            ans[full[j]][full[(j + 1) % m]] = 1;
            ans[full[(j + 1) % m]][full[j]] = 1;
        }
    }
    for (int i = 0; i < n;i++)
        for (int j = 0; j < n; j++)
            if (ans[i][j])
                rcc.merge(i, j);

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (pair(cc.get(i) == cc.get(j), cc1.get(i) == cc1.get(j))
                    != pair(rcc.get(i) == rcc.get(j), rcc1.get(i) == rcc1.get(j)))
                return 0;
        }
    }

    build(ans);
	return 1;
}

Compilation message

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:10:25: warning: statement has no effect [-Wunused-value]
   10 | #define debug(args...) {42;}
      |                         ^~
supertrees.cpp:81:9: note: in expansion of macro 'debug'
   81 |         debug(full);
      |         ^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Runtime error 2 ms 1104 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Runtime error 2 ms 1104 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 300 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 7 ms 1236 KB Output is correct
9 Correct 152 ms 24132 KB Output is correct
10 Runtime error 1 ms 848 KB Execution killed with signal 11
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 304 KB Output is correct
2 Correct 0 ms 296 KB Output is correct
3 Correct 1 ms 596 KB Output is correct
4 Runtime error 23 ms 7936 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Runtime error 2 ms 1104 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Runtime error 2 ms 1104 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -