Submission #982858

#TimeUsernameProblemLanguageResultExecution timeMemory
982858LalicSimurgh (IOI17_simurgh)C++17
0 / 100
70 ms4560 KiB
#include "simurgh.h" #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define all(x) x.begin(), x.end() #define allr(x) x.rbegin(), x.rend() #define mp make_pair typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 2e5+10; const int MOD = 1e9+7; const int INF = 0x3f3f3f3f; const ll LINF = 0x3f3f3f3f3f3f3f3f; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int pai[505], peso[505]; vector<pii> adj[505]; int find(int x){ return (pai[x]==x ? x : pai[x]=find(pai[x])); } void join(int a, int b){ a=find(a); b=find(b); if(a==b) return; if(peso[a]>peso[b]) swap(a, b); pai[a]=b; peso[b]=max(peso[b], peso[a]+1); } vector<int> find_roads(int n, vector<int> u, vector<int> v) { int m=(int)u.size(); vector<pii> aresta; for(int i=0;i<m;i++){ aresta.pb({u[i], v[i]}); adj[u[i]].pb({v[i], i}); adj[v[i]].pb({u[i], i}); } vector<int> sk(m); for(int i=0;i<n;i++){ for(int j=0;j<n;j++) pai[j]=j, peso[j]=0; vector<int> curr; for(int j=0;j<m;j++){ pii at=aresta[j]; if(at.fi==i || at.se==i) continue; if(find(at.fi)!=find(at.se)){ join(at.fi, at.se); curr.pb(j); } } int comp=0; if(!i) comp=1; for(auto at : adj[i]){ if(find(comp)==find(at.fi)) continue; join(i, at.fi); curr.pb(at.se); } vector<int> lh={adj[i][0].se}, rh; curr.pb(adj[i][0].se); int ini=count_common_roads(curr); curr.pop_back(); bool useRH=0; for(int j=1;j<(int)adj[i].size();j++){ curr.pb(adj[i][j].se); int qnt=count_common_roads(curr); curr.pop_back(); if(qnt!=ini){ if(qnt>ini) useRH=1; rh.pb(adj[i][j].se); } else lh.pb(adj[i][j].se); } if(!useRH){ for(auto at : lh){ //royal.pb(aresta[at]); sk[at]=1; //mark[aresta[at].fi]=1; //mark[aresta[at].se]=1; } } else{ for(auto at : rh){ //royal.pb(aresta[at]); sk[at]=1; //mark[aresta[at].fi]=1; //mark[aresta[at].se]=1; } } } vector<int> ans; for(int i=0;i<m;i++) if(sk[i]) ans.pb(i); return ans; }
#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...