Submission #524045

# Submission time Handle Problem Language Result Execution time Memory
524045 2022-02-08T14:44:45 Z Turkhuu Connecting Supertrees (IOI20_supertrees) C++17
0 / 100
243 ms 27804 KB
#include "supertrees.h"
#include <vector>
#include <bits/stdc++.h>

using namespace std;

struct dsu{
  int n;
  vector<int> size, parent;
 
  dsu(int _n) : n(_n), size(n, 1), parent(n){
    iota(parent.begin(), parent.end(), 0);
  }
 
  int get(int a){
    return a == parent[a] ? a : parent[a] = get(parent[a]);
  }
 
  bool unite(int b, int a){
    a = get(a);
    b = get(b);
    if(a == b){
      return 0;
    }
    size[b] += size[a];
    parent[a] = b;
    return 1;
  }
};

int construct(vector<vector<int>> a){
	int n = a.size();
  vector<vector<int>> g(n);
  vector<vector<int>> ans(n, vector<int>(n, 0));
	vector<vector<int>> v1(n),v2(n);
	for(int i = 0; i < n; i++){
		for(int j = i + 1; j < n; j++){
			if(a[i][j] == 1){
				v1[i].push_back(j);
				v1[j].push_back(i);

			} else if(a[i][j] == 2){
				v2[i].push_back(j);
        v2[j].push_back(i);
			} else if(a[i][j] == 3){
        return 0;
      }
		}
	}
  dsu s(n);
  for(int i = 0; i < n; i++){
    if(s.parent[i] == i){
      for(int j = 0; j < n; j++){
        for(int k : v1[i]){
          if(a[k][j] != a[i][j]){
            return 0;
          }
          ans[i][k] = 1;
          ans[k][i] = 1;
          g[i].push_back(k);
          g[k].push_back(i);
          s.unite(i, k);
        }
      }
    }
  }
  vector<bool> b(n, false);
  for(int i = 0; i < n; i++){
    if(s.parent[i] != i || b[s.parent[i]]){
      continue;
    }
    b[i] = true;
    int cur = i;
    int cnt = 1;
    for(int j : v2[i]){
      if(s.parent[j] != j){
        if(a[i][s.parent[j]] != 2){
          return 0;
        }
        continue;
      }
      for(int k : v2[j]){
        if((a[i][k] != 1 && s.parent[k] == i) || (a[i][k] == 1 && s.parent[k] != i)){
          return 0;
        }
      }
      ans[cur][j] = 1;
      ans[j][cur] = 1;
      g[cur].push_back(j);
      g[j].push_back(cur);
      b[j] = true;
      cur = j;
      cnt += 1;
    }
    if(cnt == 1){
      continue;
    }
    if(cnt == 2){
      return 0;
    }
    ans[i][cur] = 1;
    ans[cur][i] = 1;
    g[i].push_back(cur);
    g[cur].push_back(i);
  }
  for(int i = 0; i < n; i++){
    int cnt = v2[i].empty() ? 0 : 2;
    cnt += s.parent[i] == i ? (int) v1[i].size() : 1;
    if((int)g[i].size() != cnt){
      return 0;
    }
  }
	build(ans);
	return 1;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Incorrect 1 ms 204 KB Answer gives possible 0 while actual possible 1
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Incorrect 1 ms 204 KB Answer gives possible 0 while actual possible 1
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 292 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 1 ms 292 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 9 ms 1228 KB Output is correct
9 Correct 243 ms 23712 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 8 ms 1484 KB Output is correct
13 Correct 219 ms 27804 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 0 ms 204 KB Output is correct
16 Correct 4 ms 884 KB Output is correct
17 Correct 117 ms 16896 KB Output is correct
18 Incorrect 1 ms 204 KB Answer gives possible 1 while actual possible 0
19 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Incorrect 1 ms 204 KB Answer gives possible 0 while actual possible 1
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Incorrect 1 ms 204 KB Answer gives possible 0 while actual possible 1
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Incorrect 1 ms 204 KB Answer gives possible 0 while actual possible 1
3 Halted 0 ms 0 KB -