Submission #1171018

#TimeUsernameProblemLanguageResultExecution timeMemory
11710184QT0RMeetings (JOI19_meetings)C++17
0 / 100
570 ms716 KiB
#include "meetings.h" #include <bits/stdc++.h> using namespace std; pair<int,int> correct(pair<int,int> p){ if (p.first>p.second)swap(p.first,p.second); return p; } set<int> graph[2002]; set<int> possible; void dfs(int v, int p){ possible.erase(v); for (auto u : graph[v]){ if (u==p)continue; dfs(u,v); } } void Solve(int N){ set<pair<int,int>> odc; int sr=Query(0,1,2); for (int i = 0; i<3; i++){ if (sr!=i){ graph[sr].insert(i); graph[i].insert(sr); odc.insert(correct({sr,i})); } } for (int i = 3; i<N; i++){ if (i==sr)continue; possible.clear(); for (int j = 0; j<i; j++)possible.insert(j); possible.insert(sr); while(possible.size()>1){ int v = *possible.begin(); int u=-1; for (int x : graph[v])if (possible.count(x)){ u=x; break; } int lca=Query(v,u,i); if (lca==i){ odc.erase(correct({v,u})); odc.insert(correct({v,i})); odc.insert(correct({u,i})); graph[v].erase(u); graph[u].erase(v); graph[v].insert(i); graph[u].insert(i); graph[i].insert(v); graph[i].insert(u); break; } dfs(v^u^lca,lca); } if (graph[i].size())continue; int v = *possible.begin(); graph[v].insert(i); graph[i].insert(v); odc.insert(correct({i,v})); } for (auto e : odc)Bridge(e.first,e.second); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...