이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "supertrees.h"
#include <vector>
typedef long long llong;
const int MAXN = 1000 + 10;
const int INF = 1e9;
bool used[MAXN];
std::vector <std::vector <int>> b;
inline void addEdge(int x, int y)
{
b[x][y] = 1;
b[y][x] = 1;
}
int construct(std::vector <std::vector <int>> p)
{
int n = p.size();
b.resize(n);
for (int i = 0 ; i < n ; ++i)
{
b[i].resize(n, 0);
for (int j = 0 ; j < n ; ++j)
{
if (p[i][j] == 3)
{
return 0;
}
}
}
for (int i = 0 ; i < n ; ++i)
{
if (used[i])
{
continue;
}
used[i] = true;
std::vector <int> by[3];
by[1].push_back(i);
by[2].push_back(i);
for (int j = 0 ; j < n ; ++j)
{
if (p[i][j] == 0 || i == j) continue;
if (used[j]) return 0;
for (int k = 0 ; k < n ; ++k)
{
if (i == k || j == k) continue;
if (((p[i][j] == 2 && p[i][k] == 1) ? 2 : p[i][k]) != p[j][k]) return 0;
}
by[p[i][j]].push_back(j);
used[j] = true;
}
if (by[2].size() == 2) return 0;
for (int i = 1 ; i < (int)by[1].size() ; ++i)
{
addEdge(by[1][i - 1], by[1][i]);
}
for (int i = 1 ; i < (int)by[2].size() ; ++i)
{
addEdge(by[2][i - 1], by[2][i]);
}
if (by[2].size() >= 3)
{
addEdge(i, by[2].back());
}
}
build(b);
return 1;
}
# | 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... |