답안 #783581

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
783581 2023-07-15T04:28:18 Z mindiyak 슈퍼트리 잇기 (IOI20_supertrees) C++14
0 / 100
1000 ms 1684660 KB
#include "supertrees.h"
#include <vector>
#include <iostream>

#define pb push_back

using namespace std;

int find_head(vector<int> a,int val){
	if(a[val] == val)
	    return val;
	return find_head(a,a[val]);
}

int find_leaf(vector<int> a,int val){
	if(a[val] == val)
	    return val;
	return find_leaf(a,a[val]);
}

int construct(vector<vector<int>> p) {
    // cout << "started" << endl;
	int n = p.size();

	vector<vector<int>> ans;
	vector<int> temp(n,0);
	vector<int> head;
	vector<int> leaf;
	for (int i = 0; i < n; i++) {
		ans.pb(temp);
		head.pb(i);
		leaf.pb(i);
	}

	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(p[i][j] >= 1){
				int c = min(i,j),d = max(i,j);

				int h_c = find_head(head,c);
				int h_d = find_head(head,d);
				int l_c = find_leaf(leaf,c);

				if(h_c != h_d){
				    ans[h_c][h_d] = 1;
				    ans[h_d][h_c] = 1;
				}
				head[h_d] = l_c;
				leaf[l_c] = h_d;
			} 
		}
	}

	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			int c = min(i,j),d = max(i,j);
			int h_c = find_head(head,c);
			int h_d = find_head(head,d);

			if(p[i][j] == 2){
				int l_c = find_leaf(leaf,c);
				int l_d = find_leaf(leaf,d);
				ans[h_c][l_d] = 1;
				ans[l_d][h_c] = 1;
				if(h_c == h_d or l_c != l_d){
					return 0;
				}
			}
			
			if(p[i][j] == 0 and h_c == h_d){
				return 0;
			}
			if(p[i][j] == 1 and h_c != h_d){
				return 0;
			}
		}
	}


	build(ans);
// 	cout << "finish" << endl;
	return 1;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1134 ms 1092784 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1134 ms 1092784 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Execution timed out 1166 ms 1316336 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1193 ms 1684660 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1134 ms 1092784 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1134 ms 1092784 KB Time limit exceeded
3 Halted 0 ms 0 KB -