제출 #1350248

#제출 시각아이디문제언어결과실행 시간메모리
1350248mydkn슈퍼트리 잇기 (IOI20_supertrees)C++17
11 / 100
66 ms22180 KiB
#include "supertrees.h"
#include <bits/stdc++.h>

using namespace std;

#define emb emplace_back

const int maxn = 1005;

int construct(vector<vector<int>> p){
	int n = p.size();
	vector<vector<int>> res(n, vector<int>(n));
	for(int i=0;i<n;++i){
		for(int j=0;j<n;++j){
			if(p[i][j] == 3) return 0;
		}
	}
	for(int s=0;s<n;++s){
		if((s == 0 || p[0][s] == 0)){
			vector<int> o, t;
			bool vis[n] = {};
			o.emb(s);
			for(int i=0;i<o.size();++i){
				int u = o[i];
				vis[u] = 1;
				for(int j=0;j<n;++j){
					//cout << u << " " << j << "\n";
					if(vis[j]) continue;
					if(p[u][j] == 1){
						vis[j] = 1;
						o.emb(j);
					}
				}
			}
			for(int i=1;i<o.size();++i){
				int u = o[i], v = o[i-1];
				res[u][v] = res[v][u] = 1;
			}
			for(auto u : o){
				for(auto v : o){
					if(u == v) continue;
					if(p[u][v] != 1) return 0;
				}
			}
			for(auto u : o){
				for(int i=0;i<n;++i){
					if(vis[i]) continue;
					if(p[u][i] == 2){
						vis[i] = 1;
						t.emb(i);
					}
				}
			}
			if(t.size() == 0) continue;
			else if(t.size() == 1) return 0;
			for(auto u : t){
				for(auto v : t){
					if(u == v) continue;
					if(p[u][v] != 2) return 0;
				}
			}
			for(auto u : o){
				for(auto v : t){
					if(p[u][v] != 2) return 0;
				}
			}
			for(int i=1;i<t.size();++i){
				int u = t[i], v = t[i-1];
				res[u][v] = res[v][u] = 1;
			}
			res[t.front()][t.back()] = res[t.back()][t.front()] = 1;
			res[o[0]][t[0]] = res[t[0]][o[0]] = 1;
			if(t.size() == 2) res[o[0]][t.back()] = res[t.back()][o[0]] = 1;
			//for(auto e : o) cout << e << " ";
			//cout << "\n";
			//for(auto e : t) cout << e << " ";
			//cout << "\n";
		}
	}
	build(res);
	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...