Submission #372986

# Submission time Handle Problem Language Result Execution time Memory
372986 2021-03-02T21:46:58 Z Matteo_Verz Connecting Supertrees (IOI20_supertrees) C++17
11 / 100
276 ms 22252 KB
#include "supertrees.h"
#include <bits/stdc++.h>

using namespace std;

int construct(vector<vector<int>> p) {
  int n = p.size();
  vector<vector<int>> answer;
  answer.resize(n);
  for(int i = 0; i < n; i++) answer[i].resize(n);

  vector <int> comp;
  // last subtask, p[i][j] == 3
  for(int i = 0; i < n; i++) {
    for(int j = 0; j < n; j++)
      if(p[i][j] > 2) return 0;
    if(p[i][i] == 2 || p[i][i] == 0) return 0;
  }

  vector <bool> isroot;
  int countcomp(0);

  comp.resize(n);
  isroot.resize(n);

  for(int i = 0; i < n; i++) { // we consider i to be the root of the connected component
    if(comp[i] != 0) continue; // it can't be a root
    comp[i] = ++countcomp;
    isroot[i] = true;

    for(int j = 0; j < n; j++) {
      if(i == j) continue;
      if(p[i][j] == 1) { // if there is only 1 edge from i to j
        comp[j] = countcomp;
        answer[i][j] = answer[j][i] = 1;
      }
    }
  }

  // now we connect the roots between them to form a cycle
  // we connect the i-th root with the i+1-th root
  for(int i = 0; i < n; i++) {
    if(isroot[i] == true) {
      for(int j = i + 1; j < n; j++) {
        if(p[i][j] == 2 && isroot[j]) {
          answer[i][j] = answer[j][i] = 1;
          j = n;
        }
      }
    }
  }

  // we connect the last with the first root
  for(int i = 0; i < n; i++) {
    if(isroot[i] == true) {
      for(int j = n - 1; j > i; j--) {
        if(p[i][j] == 2 && isroot[j]) {
          answer[i][j] = answer[j][i] = 1;
          j = 0;
        }
      }
      i = n;
    }
  }

  // now we need to verify if our build is fine
  // 1. We can't have a cycle of length 2
  if(countcomp == 2) {
    for(int i = 0; i < n; i++)
      for(int j = 0; j < n; j++)
        if(p[i][j] == 2)
          return 0;
  }

  // 2. If p[a][b] = 1 and p[b][c] = 1, then p[a][c] = 1
  for(int i = 0; i < n; i++) {
    for(int j = 0; j < n; j++)
      if(comp[i] != comp[j] && p[i][j] == 1)
        return 0;
  }

  build(answer);
  return 1;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 11 ms 1260 KB Output is correct
7 Correct 260 ms 22124 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 11 ms 1260 KB Output is correct
7 Correct 260 ms 22124 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 11 ms 1260 KB Output is correct
13 Correct 252 ms 22124 KB Output is correct
14 Correct 1 ms 364 KB Output is correct
15 Correct 1 ms 364 KB Output is correct
16 Correct 5 ms 748 KB Output is correct
17 Correct 110 ms 12140 KB Output is correct
18 Correct 1 ms 380 KB Output is correct
19 Incorrect 1 ms 364 KB Answer gives possible 1 while actual possible 0
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 10 ms 1260 KB Output is correct
9 Correct 251 ms 22252 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 11 ms 1260 KB Output is correct
13 Correct 252 ms 22252 KB Output is correct
14 Incorrect 1 ms 364 KB Answer gives possible 1 while actual possible 0
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 64 ms 5868 KB Output is correct
5 Correct 255 ms 22124 KB Output is correct
6 Correct 276 ms 22200 KB Output is correct
7 Correct 253 ms 22240 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Incorrect 64 ms 5868 KB Too few ways to get from 1 to 17, should be 2 found 1
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 11 ms 1260 KB Output is correct
7 Correct 260 ms 22124 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 11 ms 1260 KB Output is correct
13 Correct 252 ms 22124 KB Output is correct
14 Correct 1 ms 364 KB Output is correct
15 Correct 1 ms 364 KB Output is correct
16 Correct 5 ms 748 KB Output is correct
17 Correct 110 ms 12140 KB Output is correct
18 Correct 1 ms 380 KB Output is correct
19 Incorrect 1 ms 364 KB Answer gives possible 1 while actual possible 0
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 11 ms 1260 KB Output is correct
7 Correct 260 ms 22124 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 11 ms 1260 KB Output is correct
13 Correct 252 ms 22124 KB Output is correct
14 Correct 1 ms 364 KB Output is correct
15 Correct 1 ms 364 KB Output is correct
16 Correct 5 ms 748 KB Output is correct
17 Correct 110 ms 12140 KB Output is correct
18 Correct 1 ms 380 KB Output is correct
19 Incorrect 1 ms 364 KB Answer gives possible 1 while actual possible 0
20 Halted 0 ms 0 KB -