Submission #128391

#TimeUsernameProblemLanguageResultExecution timeMemory
128391wilwxkMeetings (JOI19_meetings)C++14
100 / 100
1036 ms964 KiB
#include "meetings.h" #include <bits/stdc++.h> using namespace std; const int MAXN=2e3+5; vector<int> bons[MAXN]; mt19937 rng(time(0)); int n, A, B; int ask(int a, int b, int c) { if(a==b||a==c) return a; if(b==c) return b; return Query(a, b, c); } bool cmp(int a, int b) { return ask(a, b, A)==a; } void liga(int a, int b) { if(a>b) swap(a, b); Bridge(a, b); } void solve(int raiz) { if(bons[raiz].size()<=1) return; //marc[raiz]=1; vector<int> linha, aux=bons[raiz]; bons[raiz].clear(); int a=rng()%aux.size(), b=rng()%aux.size(); while(a==b) b=rng()%aux.size(); a=aux[a]; b=aux[b]; // printf("solving %d >> %d e %d\n", raiz, a, b, bons[raiz].size()); // for(auto cara : aux) printf("%d ", cara); printf("|||\n"); for(auto cur : aux) { int cara=ask(cur, a, b); bons[cara].push_back(cur); linha.push_back(cara); } sort(linha.begin(), linha.end()); auto it=unique(linha.begin(), linha.end()); linha.resize(it-linha.begin()); A=a; B=b; sort(linha.begin(), linha.end(), cmp); // for(auto cur : linha) printf("linha_ord %d // %d %d // %d\n", cur, a, b, linha.size(), it-linha.begin()); for(int i=1; i<linha.size(); i++) liga(linha[i], linha[i-1]); for(auto cur : linha) solve(cur); } void Solve(int N) { n=N; for(int i=0; i<n; i++) bons[n].push_back(i); solve(n); }

Compilation message (stderr)

meetings.cpp: In function 'void solve(int)':
meetings.cpp:40:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=1; i<linha.size(); i++) liga(linha[i], linha[i-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...