답안 #1043701

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1043701 2024-08-04T14:19:49 Z DeathIsAwe 슈퍼트리 잇기 (IOI20_supertrees) C++14
0 / 100
0 ms 348 KB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;

int construct(vector<vector<int>> p) {
	int n = p.size(), prev;
	vector<vector<int>> ans(n);
	bool visited[n];
	for (int i=0;i<n;i++) {
		visited[i] = false;
		for (int j=0;j<n;j++) {
			ans[i].push_back(0);
		}
	}
	vector<vector<int>> currentnodes(3);
	for (int i=0;i<n;i++) {
		if (visited[i]) {
			continue;
		}
		visited[i] = true;
		for (int j=0;j<3;j++) {
			currentnodes[j].clear();
		}
		for (int j=0;j<n;j++) {
			if (j == i) {
				continue;
			}
			if (p[i][j] > 0) {
				if (visited[j]) {
					return 0;
				}
				visited[j] = true;
				if (p[i][j] == 1) {
					currentnodes[1].push_back(j);
				} else if (p[i][j] == 2) {
					currentnodes[2].push_back(j);
				} else if (p[i][j] == 3) {
					return 0;
				}
			}
		}
		//for (int j: currentnodes[1]) {
		//	cout << j << ' ';
		//}
		//cout << '\n';
		//for (int j: currentnodes[2]) {
		//	cout << j << ' ';
		//}
		//cout << '\n';
		for (int j: currentnodes[1]) {
			for (int k=0;k<n;k++) {
				if (!visited[k]) {
					if (p[j][k] != 0) {
						return 0;
					}
				}
			}
		}
		for (int j: currentnodes[2]) {
			for (int k=0;k<n;k++) {
				if (!visited[k]) {
					if (p[j][k] != 0) {
						return 0;
					}
				}
			}
		}
		



		if (currentnodes[2].size() == 1) {
			return 0;
		}
		for (int j: currentnodes[1]) {
			for (int k: currentnodes[1]) {
				if (p[j][k] != 1) {
					return 0;
				}
			}
			for (int k: currentnodes[2]) {
				if (p[j][k] != 2) {
					return 0;
				}
			}
		}
		for (int j: currentnodes[2]) {
			for (int k: currentnodes[2]) {
				if (j == k) {
					continue;
				}
				if (p[j][k] != 2) {
					return 0;
				}
			}
		}
		prev = i;
		for (int j: currentnodes[1]) {
			ans[prev][j] = 1;
			ans[j][prev] = 1;
			prev = j;
		}
		prev = i;
		for (int j: currentnodes[2]) {
			ans[prev][j] = 1;
			ans[j][prev] = 1;
			prev = j;
		}
		if (prev == i) {
			continue;
		}
		ans[prev][i] = 1;
		ans[i][prev] = 1;
	}


	return 0;
	build(ans);
	return 1;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Answer gives possible 0 while actual possible 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Answer gives possible 0 while actual possible 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Answer gives possible 0 while actual possible 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Answer gives possible 0 while actual possible 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Answer gives possible 0 while actual possible 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Answer gives possible 0 while actual possible 1
2 Halted 0 ms 0 KB -