# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
642941 | _petar_b | Connecting Supertrees (IOI20_supertrees) | C++14 | 219 ms | 24056 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "supertrees.h"
#include <bits/stdc++.h>
#define MAXN 1010
using namespace std;
int graph[MAXN], graph_count = 1, krak[MAXN];
int construct(std::vector<std::vector<int>> p) {
int n = p.size();
std::vector<std::vector<int>> answer;
for (int i = 0; i < n; i++) {
std::vector<int> row;
row.resize(n, 0);
answer.push_back(row);
}
//
for (int i = 0; i < n; i++)
{
if (graph[i] == 0) graph[i] = graph_count++;;
for (int j = 0; j < n; j++)
{
if (p[i][j] == 3)
return 0;
if (p[i][j])
{
if (graph[j] != 0 && graph[j] != graph[i])
return 0;
graph[j] = graph[i];
}
else if (graph[i] == graph[j])
return 0;
}
}
//
vector<vector<int>> kraci;
vector<int> empt; kraci.push_back(empt);
vector<vector<int>> ciklusi;
ciklusi.resize(graph_count);
for (int i = 0 ; i < n; i++)
{
bool all2 = true, all0 = true;
for (int j = 0; j < n; j++) if (j != i && graph[i] == graph[j])
{
if (p[i][j] == 2) all0 = false;
if (p[i][j] == 1)
{
all2 = false;
all0 = false;
if (krak[i] == 0)
{
krak[i] = krak[j];
}
else if (krak[j] != 0 && krak[i] != krak[j])
return 0;
}
}
if (all0)
;
else if (all2)
{
ciklusi[graph[i]].push_back(i);
}
else
{
if (krak[i] == 0)
{
kraci.push_back(empt);
kraci[kraci.size()-1].push_back(i);
krak[i] = kraci.size() - 1;
ciklusi[graph[i]].push_back(i);
}
else
kraci[krak[i]].push_back(i);
}
}
//povezivanje ciklusa
for (int i = 1; i < graph_count; i++) if (!ciklusi[i].empty())
{
if (ciklusi[i].size() == 1)
;
else if (ciklusi[i].size() == 2)
return 0;
else
{
int last = ciklusi[i][0];
for (int j = 1; j < ciklusi[i].size(); j++)
{
answer[last][ciklusi[i][j]] = 1;
answer[ciklusi[i][j]][last] = 1;
last = ciklusi[i][j];
}
answer[ciklusi[i][0]][last] = 1;
answer[last][ciklusi[i][0]] = 1;
}
}
//povezivanje krakova
for (int i = 1; i < kraci.size(); i++)
{
for (int j = 1; j < kraci[i].size(); j++)
{
answer[kraci[i][j-1]][kraci[i][j]] = 1;
answer[kraci[i][j]][kraci[i][j-1]] = 1;
}
}
build(answer);
return 1;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |