제출 #1034134

#제출 시각아이디문제언어결과실행 시간메모리
1034134amirhoseinfar1385Split the Attractions (IOI19_split)C++17
33 / 100
62 ms20848 KiB
#include "split.h" #include<bits/stdc++.h> using namespace std; const int maxn=200000+10; vector<int>adj[maxn]; int high[maxn],sz[maxn]; int n,a,b,c,m,f=0,res[maxn],vis[maxn],s,t,bal[maxn]; vector<pair<int,int>>allv; void clear(){ for(int i=0;i<=n;i++){ vis[i]=0; } } void dfs(int u,int par=-1){ vis[u]=1; bal[u]=high[u]; sz[u]=1; for(auto x:adj[u]){ if(x==par||vis[x]==0){ continue; } bal[u]=min(bal[u],bal[x]); } for(auto x:adj[u]){ if(vis[x]==0){ high[x]=high[u]+1; dfs(x,u); sz[u]+=sz[x]; bal[u]=min(bal[u],bal[x]); if(bal[x]>=high[u]){ f=1; if(sz[x]>=a&&n-sz[x]>=b){ s=x; t=u; } if(sz[x]>=b&&(n-sz[x])>=a){ s=u; t=x; } } } } } void dfssolve(int u,int nar,int w){ if(a==0){ return ; } a--; res[u]=w; vis[u]=1; for(auto x:adj[u]){ if(x==nar||vis[x]){ continue; } dfssolve(x,nar,w); } } vector<int>rasbor(){ f=0; dfs(0); if(f==0){ return {}; } //cout<<s<<" "<<t<<endl; if(f==1&&s==-1){ vector<int>ret; ret.resize(n); return ret; } clear(); dfssolve(s,t,1); clear(); swap(a,b); dfssolve(t,s,2); vector<int>ret; for(int i=0;i<n;i++){ if(res[i]>=1){ ret.push_back(res[i]); }else{ ret.push_back(3); } } return ret; } vector<int>doham(){ exit(23); return {}; } vector<int>solve(){ vector<int>ret=rasbor(); if(ret.size()==0){ ret=doham(); } for(int i=0;i<n;i++){ if(ret[i]!=0) ret[i]=allv[ret[i]-1].second; } return ret; } vector<int> find_split(int n_, int a_, int b_, int c_, vector<int> p, vector<int> q) { n=n_; s=t=-1; allv.push_back(make_pair(a_,1)); allv.push_back(make_pair(b_,2)); allv.push_back(make_pair(c_,3)); sort(allv.begin(),allv.end()); a=allv[0].first; b=allv[1].first; c=allv[2].first; m=(int)p.size(); for(int i=0;i<m;i++){ adj[p[i]].push_back(q[i]); adj[q[i]].push_back(p[i]); } //solve(); return solve(); }
#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...