Submission #1149279

#TimeUsernameProblemLanguageResultExecution timeMemory
1149279ReLiceToy Train (IOI17_train)C++20
100 / 100
189 ms11972 KiB
#include "train.h" #include <bits/stdc++.h> #define ll int #define str string #define ins insert #define ld long double #define pb push_back #define pf push_front #define pof pop_front() #define pob pop_back() #define lb lower_bound #define ub upper_bound #define endl "\n" #define fr first #define sc second #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define sz size() #define vll vector<ll> #define bc back() #define arr array #define pll vector<pair<ll,ll>> using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define ordered_set tree<ll, null_type,less_equal<ll>, rb_tree_tag,tree_order_statistics_node_update> template<class S,class T> bool chmin(S &a,const T &b) { return a>b?(a=b)==b:false; } template<class S,class T> bool chmax(S &a,const T &b) { return a<b?(a=b)==b:false; } //void fre(string s){freopen((s+".in").c_str(),"r",stdin);freopen((s+".out").c_str(),"w",stdout);} void start(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } const ll inf=1e9; const ll mod=1e9+7; const ll N=2e5+7; const ld eps=1e-9; vector<vll> g(N),g2(N); vll res; bool f[N]; ll cnt[N]; vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) { ll i; res.resize(a.sz); ll n=a.sz; map<pair<ll,ll>,ll> mp; for(i=0;i<(ll)u.sz;i++){ while(i<(ll)u.sz && mp[{u[i],v[i]}]){ swap(u[i],u.bc); swap(v[i],v.bc); u.pob; v.pob; } g[u[i]].pb(v[i]); g2[v[i]].pb(u[i]); cnt[u[i]]++; mp[{u[i],v[i]}]++; } vll st; for(i=0;i<n;i++){ if(r[i]){ st.pb(i); } } ll x=0; while(true){ x=st.sz; vll q=st; for(auto i : q)f[i]=1; while(q.sz){ ll x=q.bc; q.pob; for(auto to : g2[x]){ if(f[to])continue; if(a[to]==1){ f[to]=1; q.pb(to); }else{ if(--cnt[to]==0){ f[to]=1; q.pb(to); } } } } for(i=0;i<(ll)st.sz;i++){ ll c=0; for(auto j : g[st[i]]){ if(f[j])c++; } if((a[st[i]]==1 && c==0) || (a[st[i]]==0 && c!=(ll)g[st[i]].sz)){ swap(st[i],st.bc); st.pob; i--; } } if((ll)st.sz==x)break; for(i=0;i<n;i++){ cnt[i]=0; } for(i=0;i<(ll)u.sz;i++)cnt[u[i]]++; for(i=0;i<n;i++) f[i]=0; } for(i=0;i<n;i++){ res[i]=(f[i] ? 1 : 0); } return res; }
#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...