이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;
#define maxn 2005
#define all(x) x.begin(),x.end()
#define disc(x) sort(all(x));x.resize(unique(all(x))-x.begin());
mt19937 rng(218);
vector<int> sub[maxn];
void subtree(int rt,vector<int> nodes){
//printf("subtree %d: ",rt);
//for(int i:nodes)printf("%d ",i);
//printf("\n");
int n=nodes.size(),far;
do{
far=nodes[rng()%n];
}while(far==rt);
for(int i:nodes)sub[i].clear();
vector<int> line;
line.push_back(rt);
line.push_back(far);
sub[rt].push_back(rt);
sub[far].push_back(far);
for(int i:nodes){
if(i==rt||i==far)continue;
//printf("query: %d %d %d\n",rt,far,i);
int par=Query(rt,far,i);
line.push_back(par);
sub[par].push_back(i);
}
disc(line);
sort(all(line),[&](int a,int b){
if(a==rt)return true;
if(b==rt)return false;
return Query(rt,a,b)==a;
});
for(int i=1;i<line.size();++i){
if(line[i-1]<line[i])Bridge(line[i-1],line[i]);
else Bridge(line[i],line[i-1]);
}
for(int i:line){
if(sub[i].size()==1)continue;
subtree(i,sub[i]);
}
}
void Solve(int n){
vector<int> v;
for(int i=0;i<n;++i)v.push_back(i);
subtree(rng()%n,v);
}
컴파일 시 표준 에러 (stderr) 메시지
meetings.cpp: In function 'void subtree(int, std::vector<int>)':
meetings.cpp:40:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
40 | for(int i=1;i<line.size();++i){
| ~^~~~~~~~~~~~
# | 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... |