# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1049967 | TahirAliyev | Connecting Supertrees (IOI20_supertrees) | C++17 | 122 ms | 24404 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "supertrees.h"
#include <bits/stdc++.h>
using namespace std;
int n;
const int MAX = 1005;
struct DSU{
int par[MAX];
vector<int> c[MAX];
void init(){
memset(par, -1, sizeof(par));
for(int i = 0; i < n; i++) c[i] = {i};
}
int get(int u){
if(par[u] < 0) return u;
return par[u] = get(par[u]);
}
bool unite(int u, int v){
u = get(u), v = get(v);
if(u == v) return 0;
if(-par[u] < -par[v]) swap(u, v);
par[u] += par[v];
par[v] = u;
for(int a : c[v]) c[u].push_back(a);
return 1;
}
};
DSU dsu;
vector<vector<int>> ans;
vector<int> g[MAX];
int bad[MAX];
vector<int> cnt;
int vis[MAX];
void dfs(int node){
cnt[node]++;
vis[node] = 1;
for(int to : g[node]){
if(vis[to]) continue;
dfs(to);
}
vis[node] = 0;
}
int construct(vector<vector<int>> p) {
n = p.size();
ans.resize(n);
for(int i = 0; i < n; i++){
ans[i].resize(n);
}
dsu.init();
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
if(p[i][j] == 1){
bad[i] = 1;
ans[i][j] = 1;
ans[j][i] = 1;
g[i].push_back(j);
g[j].push_back(i);
break;
}
}
}
for(int i = 0; i < n; i++){
if(bad[i]) continue;
for(int j = i + 1; j < n; j++){
if(bad[j]) continue;
if(p[i][j] == 2) dsu.unite(i, j);
}
}
for(int i = 0; i < n; i++){
if(bad[i]) continue;
if(dsu.par[i] >= 0) continue;
vector<int> v = dsu.c[i];
for(int j = 0; j + 1 < v.size(); j++){
ans[v[j]][v[j + 1]] = 1;
ans[v[j + 1]][v[j]] = 1;
g[v[j]].push_back(v[j + 1]);
g[v[j + 1]].push_back(v[j]);
}
if(v.size() > 2){
ans[v[0]][v.back()] = 1;
ans[v.back()][v[0]] = 1;
g[v[0]].push_back(v.back());
g[v.back()].push_back(v[0]);
}
}
// for(int i = 0; i < n; i++){
// for(int j = 0; j < n; j++){
// cout << ans[i][j] << ' ';
// }
// cout << '\n';
// }
cnt.resize(n, 0);
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
vis[j] = 0;
cnt[j] = 0;
}
dfs(i);
if(p[i] != cnt){
return 0;
}
}
build(ans);
return 1;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |