이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "icc.h"
using namespace std;
const int maxn = 110;
int roads = 0;
struct Dsu
{
int pai[maxn], w[maxn];
int find(int x)
{
if (pai[x] == x) return x;
return pai[x] = find(pai[x]);
}
void join(int x, int y)
{
x = find(x), y = find(y);
if (w[x] < w[y]) swap(x, y);
pai[y] = x;
w[x] += y;
}
void reset(int x)
{
for(int i = 1; i <= x; i++)
pai[i] = i, w[i] = 1;
}
};
Dsu dsu;
bool find(int n, int x)
{
vector<int> v;
vector<int> vx = {x};
for (int i = x+1; i <= n; i++)
if (dsu.find(i) != dsu.find(x))
v.push_back(i);
if (v.size() == 0) return false;
return query(1, v.size(), vx.data(), v.data());
}
int qrs = 0;
void solve(int n, int x)
{
for (int i = x+1; i <= n; i++) {
if (dsu.find(i) == dsu.find(x))
continue;
vector<int> vx = {x};
vector<int> v = {i};
qrs++;
if (query(1, 1, vx.data(), v.data())) {
// if (roads == n-2)
// cout << qrs << "\n";
setRoad(x, i);
roads++;
dsu.join(x, i);
break;
}
}
}
void run(int n)
{
dsu.reset(n);
while (roads < n-1) {
int root;
for (int i = 1; i < n; i++) {
if (find(n, i)) {
root = i;
break;
}
}
solve(n, root);
}
}
컴파일 시 표준 에러 (stderr) 메시지
icc.cpp: In function 'void run(int)':
icc.cpp:87:8: warning: 'root' may be used uninitialized in this function [-Wmaybe-uninitialized]
solve(n, root);
~~~~~^~~~~~~~~
# | 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... |