# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
304647 | ocarima | 슈퍼트리 잇기 (IOI20_supertrees) | C++14 | 1 ms | 384 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "supertrees.h"
#include <vector>
using namespace std;
#define rep(i, a, b) for(int i = (a); i <= (b); i++)
#define MAX_N 1001
vector<int> linea[MAX_N]; // VECTOR PARA GUARDAR LOS NODOS DE CADA LINEA
vector<int> ciclo[MAX_N]; // NODOS EN CADA CICLO
int grupo[MAX_N]; // SUBGRAFO AL QUE PERTENECE CADA NODO
int construct(std::vector<std::vector<int> > p) {
int n = p.size();
vector<vector<int> > respuesta;
rep(i, 0, n - 1){
vector<int> fila;
fila.resize(n);
respuesta.push_back(fila);
}
rep(i, 0, n - 1) grupo[i] = i;
rep(i, 0, n - 1){
rep(j, i + 1, n - 1){
if (p[i][j] == 0 && grupo[i] == grupo[j]) return 0;
else if(p[i][j] == 2 && grupo[i] == i && grupo[j] == j){
ciclo[i].push_back(j);
grupo[j] = i;
}
else if (p[i][j] == 2 && grupo[i] != grupo[j]) return 0;
}
}
rep(i, 0, n - 1){
if (ciclo[i].size() == 1) return 0; // NO PUEDE HABER UN CICLO DE SOLO 2 NODOS
if (ciclo[i].size() > 0){
rep(j, 1, ciclo[i].size() - 1){
respuesta[ciclo[i][j]][ciclo[i][j - 1]] = 1;
respuesta[ciclo[i][j - 1]][ciclo[i][j]] = 1;
}
respuesta[ciclo[i][0]][ciclo[i][ciclo[i].size() - 1]] = 1;
respuesta[ciclo[i][ciclo[i].size() - 1]][ciclo[i][0]] = 1;
}
}
build(respuesta);
return 1;
}
컴파일 시 표준 에러 (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... |