제출 #1345506

#제출 시각아이디문제언어결과실행 시간메모리
1345506nathlol2슈퍼트리 잇기 (IOI20_supertrees)C++20
46 / 100
67 ms22280 KiB
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;

int construct(std::vector<std::vector<int>> p){
	int n = p.size();
	vector<int> vis(n, 0);
	vector<vector<int>> ln, cyc, ans(n, vector<int>(n, 0));
	for(int i = 0;i<n;i++){
		if(!vis[i]){
			vis[i] = 1;
			ln.push_back({i});
			for(int j = i + 1;j<n;j++){
				if(p[i][j] == 1) ln.back().push_back(j), vis[j] = 1;
				else if(p[i][j] == 3) return 0;
			}
		}
	}
	int m = ln.size();
	for(int i = 0;i<n;i++) vis[i] = 0;
	for(int i = 0;i<m;i++){
		if(!vis[ln[i][0]]){
			vis[ln[i][0]] = 1;
			cyc.push_back({ln[i][0]});
			for(int j = i + 1;j<m;j++){
				if(p[ln[i][0]][ln[j][0]] == 2) cyc.back().push_back(ln[j][0]), vis[ln[j][0]] = 1;
			}
		}
	}
	for(int i = 0;i<m;i++){
		for(int j = 0;j<ln[i].size() - 1;j++){
			ans[ln[i][j]][ln[i][j + 1]] = ans[ln[i][j + 1]][ln[i][j]] = 1;
		}
	}
	for(int i = 0;i<cyc.size();i++){
		for(int j = 0;j<cyc[i].size() - 1;j++){
			ans[cyc[i][j]][cyc[i][j + 1]] = ans[cyc[i][j + 1]][cyc[i][j]] = 1;
		}
		if(cyc[i].size() != 1) ans[cyc[i][0]][cyc[i].back()] = ans[cyc[i].back()][cyc[i][0]] = 1;
	}
	build(ans);
	return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...