이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "icc.h"
using namespace std;
int P[101], S[101];
vector <int> V[101];
int Parent(int a)
{
if (P[a] == a)
{
return a;
}
return P[a] = Parent(P[a]);
}
void Union(int a, int b)
{
int pa, pb;
pa = Parent(a);
pb = Parent(b);
if (pa != pb)
{
if (S[pb] > S[pa])
{
swap(pa, pb);
}
for (int i = 0; i < V[pb].size(); i++)
{
V[pa].push_back(V[pb][i]);
}
S[pa] += S[pb];
P[pb] = pa;
}
}
void run(int N)
{
srand(time(0));
for (int i = 0; i <= N; i++)
{
P[i] = i;
S[i] = 1;
V[i].push_back(i);
}
for (int i = N; i >= 2; i--)
{
int F[i], k=0;
for (int y = 0; y < N; y++)
{
if (Parent(y) == y)
{
F[k] = y;
k++;
}
}
int A[N], B[N], Pr[k], a, b, sa, sb;
vector <pair<long long,int>> FF;
while (true)
{
FF.clear();
for (int y = 0; y < k; y++)
{
long long ran = rand()*RAND_MAX+rand();
FF.push_back({ran,F[y]});
}
//random_shuffle(F, F+k);
sort(FF.begin(),FF.end());
sa = 0;
sb = 0;
for (int y = 0; y < i/2; y++)
{
//A[y] = F[y]+1;
for (int u = 0; u < V[FF[y].second].size(); u++)
{
A[sa] = V[FF[y].second][u]+1;
sa++;
}
}
for (int y = i/2; y < i; y++)
{
//B[y-i/2] = F[y]+1;
for (int u = 0; u < V[FF[y].second].size(); u++)
{
B[sb] = V[FF[y].second][u]+1;
sb++;
}
}
if (query(sa, sb, A, B) == 1)
{
break;
}
}
int L=0, R=sa, t, s;
while (R-L > 1)
{
t = (L+R) / 2;
s = (R-1)-t+1;
int C[s];
k = 0;
for (int y = t; y < R; y++)
{
C[k] = A[y];
k++;
}
if (query(k, sb, C, B) == 1)
{
L = t;
}
else
{
R = t;
}
}
a = A[L];
L = 0;
R = sb;
while (R-L > 1)
{
t = (L+R) / 2;
s = (R-1)-t+1;
int C[s];
k = 0;
for (int y = t; y < R; y++)
{
C[k] = B[y];
k++;
}
if (query(sa, k, A, C) == 1)
{
L = t;
}
else
{
R = t;
}
}
b = B[L];
setRoad(a, b);
Union(a-1, b-1);
}
}
컴파일 시 표준 에러 (stderr) 메시지
icc.cpp: In function 'void Union(int, int)':
icc.cpp:29:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i < V[pb].size(); i++)
~~^~~~~~~~~~~~~~
icc.cpp: In function 'void run(int)':
icc.cpp:76:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int u = 0; u < V[FF[y].second].size(); u++)
~~^~~~~~~~~~~~~~~~~~~~~~~~
icc.cpp:85:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int u = 0; u < V[FF[y].second].size(); u++)
~~^~~~~~~~~~~~~~~~~~~~~~~~
icc.cpp:58:25: warning: unused variable 'Pr' [-Wunused-variable]
int A[N], B[N], Pr[k], a, b, sa, sb;
^~
# | 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... |