Submission #713881

#TimeUsernameProblemLanguageResultExecution timeMemory
713881alvingogo통행료 (IOI18_highway)C++14
5 / 100
591 ms262144 KiB
#include "highway.h" #include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define AquA cin.tie(0);ios_base::sync_with_stdio(0); #define fs first #define sc second #define p_q priority_queue using namespace std; struct no{ vector<pair<int,int> > ch; int deg=0; int ndeg=0; }; vector<no> v; int n; int a,b; int dis; vector<int> chg; vector<int> get(int rt){ vector<int> x; function<void(int,int)> dfs=[&](int r,int f){ for(auto h:v[r].ch){ if(h.fs!=f){ dfs(h.fs,r); } } x.push_back(r); }; dfs(rt,rt); return x; } int find_right(int rt){ auto x=get(rt); int l=0,r=n-1; while(r>l){ int mid=(l+r)/2; for(int i=0;i<=mid;i++){ for(auto z:v[x[i]].ch){ chg[z.sc]=1; } } if(ask(chg)!=dis){ r=mid; } else{ l=mid+1; } for(int i=0;i<=mid;i++){ for(auto z:v[x[i]].ch){ chg[z.sc]=0; } } } return x[l]; } void find_pair(int N, vector<int> U, vector<int> V, int A, int B) { a=A; b=B; n=N; v.resize(n); int m=U.size(); for(int i=0;i<m;i++){ v[U[i]].ch.push_back({V[i],i}); v[V[i]].ch.push_back({U[i],i}); v[U[i]].deg++; v[V[i]].deg++; } for(int i=0;i<n;i++){ v[i].ndeg=v[i].deg; } chg.resize(m,0); dis=ask(chg); int u=find_right(0); int y=find_right(u); answer(u,y); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...