Submission #826939

# Submission time Handle Problem Language Result Execution time Memory
826939 2023-08-16T07:11:38 Z erray Connecting Supertrees (IOI20_supertrees) C++17
11 / 100
156 ms 22024 KB
#include "supertrees.h"
#include <vector>
#include <bits/stdc++.h>

using namespace std;

#ifdef DEBUG
  #include "/home/eagle/ioi19/day2/debug.h"
#else 
  #define debug(...) void(37)
#endif

int construct(std::vector<std::vector<int>> P) {
	int N = int(P.size());
  vector<vector<int>> ans(N, vector<int>(N));
  auto Add = [&](int x, int y) {
    ans[x][y] = ans[y][x] = true;
  };
  bool bad = false;
  auto Group = [&](vector<int> s, function<bool(int)> connected) {
    int c = int(s.size());
    vector<bool> used(c);
    vector<vector<int>> gs;
    for (int i = 0; i < c; ++i) {
      if (used[i]) {
        continue;
      }
      gs.push_back({i});
      for (int j = i + 1; j < c; ++j) {
        if (connected(P[s[i]][s[j]])) {
          if (used[j]) {
            bad = true;
          }
          used[j] = true;
          gs.back().push_back(s[j]);
        }
      }
      for (auto x : gs.back()) {
        for (auto y : gs.back()) {
          bad |= !connected(P[x][y]);
        }
      }
    }
    return gs;
  };
  vector<int> foo(N);
  iota(foo.begin(), foo.end(), 0);
  auto gs = Group(foo, [&](int x) {
    return x != 0;
  });
  debug(gs);
  for (auto g : gs) {
    bool two = false, three = false;
    for (auto x : g) {
      for (auto y : g) {
        two |= P[x][y] == 2;
        three |= P[x][y] == 3; 
      }
    }
    auto ones = Group(g, [&](int x) {
      return x == 1;
    });
    if ((two && three) || (two && int(ones.size()) < 3) || (three && int(ones.size()) < 4)) {
      bad = true;
      break;
    }
    assert(int(ones.size()) == 1);
    for (auto o : ones) {
      for (int i = 0; i < int(o.size()) - 1; ++i) {
        Add(o[i], o[i + 1]);
      }
    }
    for (int i = 0; i < int(ones.size()) - 1; ++i) {
      Add(ones[i][0], ones[i + 1][0]);
    }
    if (two || three) {
      Add(ones[0][0], ones[2][0]);
    }
    if (three) {
      Add(ones[1][0], ones[3][0]);
    }
  }
  if (bad) {
    return 0;
  }
  build(ans);
	return 1;
}
# 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 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 6 ms 1148 KB Output is correct
7 Correct 147 ms 21936 KB Output is correct
# 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 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 6 ms 1148 KB Output is correct
7 Correct 147 ms 21936 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 6 ms 1108 KB Output is correct
13 Correct 156 ms 22024 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 3 ms 724 KB Output is correct
17 Correct 72 ms 12172 KB Output is correct
18 Incorrect 0 ms 212 KB Answer gives possible 1 while actual possible 0
19 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 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Runtime error 1 ms 340 KB Execution killed with signal 6
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Runtime error 1 ms 340 KB Execution killed with signal 6
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 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 6 ms 1148 KB Output is correct
7 Correct 147 ms 21936 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 6 ms 1108 KB Output is correct
13 Correct 156 ms 22024 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 3 ms 724 KB Output is correct
17 Correct 72 ms 12172 KB Output is correct
18 Incorrect 0 ms 212 KB Answer gives possible 1 while actual possible 0
19 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 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 6 ms 1148 KB Output is correct
7 Correct 147 ms 21936 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 6 ms 1108 KB Output is correct
13 Correct 156 ms 22024 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 3 ms 724 KB Output is correct
17 Correct 72 ms 12172 KB Output is correct
18 Incorrect 0 ms 212 KB Answer gives possible 1 while actual possible 0
19 Halted 0 ms 0 KB -