Submission #808096

# Submission time Handle Problem Language Result Execution time Memory
808096 2023-08-05T04:35:15 Z The_Samurai Connecting Supertrees (IOI20_supertrees) C++17
0 / 100
1 ms 212 KB
#include "bits/stdc++.h"
#ifdef sunnatov
#include "grader.cpp"
#else
#include "supertrees.h"
#endif

using namespace std;

struct dsu {
    vector<int> p, size;

    void init(int n) {
        p.assign(n, 0);
        size.assign(n, 1);
        for (int i = 0; i < n; i++) p[i] = i;
    }

    int get(int a) {
        return p[a] == a ? a : p[a] = get(p[a]);
    }

    void add(int a, int b) {
        a = get(a);
        b = get(b);
        if (a == b) return;
        if (size[a] > size[b]) swap(a, b);
        size[b] += size[a];
        p[a] = b;
    }
};


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

    vector<vector<int>> g(n, vector<int>(n));
    dsu ds;
    ds.init(n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (p[i][j] == 2) {
                ds.add(i, j);
            }
        }
    }
    vector<bool> vis(n);
    for (int _ = 0; _ < n; _++) {
        int s = -1;
        vector<int> v;
        for (int i = 0; i < n; i++) {
            if (vis[i]) continue;
            if (s == -1) s = ds.get(i);
            if (ds.get(i) != s) continue;
            v.emplace_back(i);
        }
        if (v.empty()) break;
        for (int i = 0; i < v.size(); i++) {
            for (int j = i + 1; j < v.size(); j++) {
                if (!p[v[i]][v[j]]) return 0;
            }
        }
        for (int i = 1; i < v.size(); i++) g[v[i - 1]][v[i]] = g[v[i]][v[i - 1]] = 1;
        if (v.size() > 1) g[v[0]][v.back()] = g[v.back()][v[0]] = 1;
        for (int x: v) vis[x] = true;
    }
    build(g);

	return 1;
}

Compilation message

supertrees.cpp: In function 'int construct(std::vector<std::vector<int> >)':
supertrees.cpp:58:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |         for (int i = 0; i < v.size(); i++) {
      |                         ~~^~~~~~~~~~
supertrees.cpp:59:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |             for (int j = i + 1; j < v.size(); j++) {
      |                                 ~~^~~~~~~~~~
supertrees.cpp:63:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |         for (int i = 1; i < v.size(); i++) g[v[i - 1]][v[i]] = g[v[i]][v[i - 1]] = 1;
      |                         ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Too few ways to get from 0 to 1, should be 1 found 0
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Too few ways to get from 0 to 1, should be 1 found 0
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Incorrect 0 ms 212 KB Answer gives possible 1 while actual possible 0
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Incorrect 0 ms 212 KB Too few ways to get from 1 to 2, should be 1 found 0
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Too few ways to get from 0 to 1, should be 1 found 0
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Too few ways to get from 0 to 1, should be 1 found 0
3 Halted 0 ms 0 KB -