제출 #1204455

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

#define pb push_back

const int N = 1e3+4;

bool vis[N];
vector<int> adj[N];
vector<int> List;
void dfs(int v) {
	vis[v] = true; List.pb(v);
	for (int u : adj[v]) if (!vis[u]) dfs(u);
}

int construct(std::vector<std::vector<int>> p) {
	int n = p.size();
	vector ans(n, vector<int>(n));

	for (int i=0; i<n; i++) {
		if (p[i][i]!=1) return 0;
		for (int j=0; j<n; j++) {
			assert(p[i][j]==0 || p[i][j]==2);
			if (p[i][j]!=p[j][i]) return 0;
		}
	}
	for (int i=0; i<n; i++) for (int j=0; j<n; j++) if (p[i][j]) {
		adj[i].pb(j); adj[j].pb(i);
	}

	for (int i=0; i<n; i++) if (!vis[i]) {
		dfs(i);
		if (List.size()>1) List.pb(List[0]);
		for (int i=0; i+1 < List.size(); i++) {
			int v = List[i], u = List[i+1];
			ans[v][u] = ans[u][v] = 1;
		}
		for (int v:List) for (int u:List) if (u!=v && p[v][u]+p[u][v]!=4) return 0;
		List.clear();
	}
	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...