Submission #373918

#TimeUsernameProblemLanguageResultExecution timeMemory
373918rrrr10000Amusement Park (JOI17_amusement_park)C++14
100 / 100
290 ms64256 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> P; typedef tuple<ll,ll,ll> PP; typedef vector<ll> vi; typedef vector<bool> vb; typedef vector<vi> vvi; typedef vector<P> vp; #define rep(i,n) for(ll i=0;i<(ll)(n);i++) #define REP(i,k,n) for(ll i=(ll)(k);i<(ll)(n);i++) #define all(a) a.begin(),a.end() #define lb(v,k) (lower_bound(all(v),k)-v.begin()) #define pb emplace_back template<class T> bool chmax(T&a,T b){if(a<b){a=b;return true;}return false;} template<class T> bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;} template<class T> void out(T a){cout<<a<<'\n';} template<class T> void outv(T v){rep(i,v.size()){if(i)cout<<' ';cout<<v[i];}cout<<'\n';} template<class T> void outvv(T v){rep(i,v.size())outv(v[i]);} const ll inf=1001001001001001001; #include "Joi.h" void Joi(int n,int m,int a[],int b[],ll res,int t){ vi dep(n); vvi G(n); vb done(n,false); vi id(n,-1); rep(i,m){ G[a[i]].pb(b[i]); G[b[i]].pb(a[i]); } vvi g(n);vi par(n,-1); ll cnt=0; vb sp(n,false);set<ll> S; function<void(ll)> dfs=[&](ll i){ if(cnt<60){ id[i]=cnt; sp[i]=true; S.insert(i); cnt++; } done[i]=true; for(ll x:G[i])if(!done[x]){ g[i].pb(x);par[x]=i;dfs(x); } };dfs(0); vector<set<ll>> memo(n); rep(i,n)if(sp[i])memo[i]=S; function<void(ll)> dfs2=[&](ll i){ int prev=-1; if(id[i]==-1){ S.insert(i); sp[i]=true; auto itr=S.begin(); while(true){ assert(itr!=S.end()); if(*itr==i){ itr++;continue; } ll jisuu=0; if(par[*itr]!=-1&&sp[par[*itr]])jisuu++; for(ll x:g[*itr]){ if(sp[x])jisuu++; if(jisuu>1)break; } assert(jisuu); if(jisuu==1){ id[i]=id[*itr]; prev=*itr; sp[*itr]=false; S.erase(itr); break; } itr++; } memo[i]=S; } for(ll x:g[i])dfs2(x); if(prev!=-1){ sp[i]=false; S.erase(i); S.insert(prev); sp[prev]=true; } };dfs2(0); rep(i,n){ set<ll> U; auto itr=memo[i].begin(); assert(memo[i].size()==60); rep(i,60){ U.insert(id[*itr]); itr++; } assert(U.size()==60); } // outv(id); rep(i,n)MessageBoard(i,res>>id[i]&1); }
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> P; typedef tuple<ll,ll,ll> PP; typedef vector<ll> vi; typedef vector<bool> vb; typedef vector<vi> vvi; typedef vector<P> vp; #define rep(i,n) for(ll i=0;i<(ll)(n);i++) #define REP(i,k,n) for(ll i=(ll)(k);i<(ll)(n);i++) #define all(a) a.begin(),a.end() #define lb(v,k) (lower_bound(all(v),k)-v.begin()) #define pb emplace_back template<class T> bool chmax(T&a,T b){if(a<b){a=b;return true;}return false;} template<class T> bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;} const ll inf=1001001001001001001; #include "Ioi.h" ll Ioi(int n,int m,int a[],int b[],int p,int v,int t){ vi dep(n); vvi G(n); vb done(n,false); vi id(n,-1); rep(i,m){ G[a[i]].pb(b[i]); G[b[i]].pb(a[i]); } vvi g(n);vi par(n,-1); ll cnt=0; vb sp(n,false);set<ll> S; function<void(ll)> dfs=[&](ll i){ if(cnt<60){ id[i]=cnt; sp[i]=true; S.insert(i); cnt++; } done[i]=true; for(ll x:G[i])if(!done[x]){ g[i].pb(x);par[x]=i;dfs(x); } };dfs(0); vector<set<ll>> memo(n); rep(i,n)if(sp[i])memo[i]=S; function<void(ll)> dfs2=[&](ll i){ int prev=-1; if(id[i]==-1){ S.insert(i); sp[i]=true; auto itr=S.begin(); while(true){ assert(itr!=S.end()); if(*itr==i){ itr++;continue; } ll jisuu=0; if(par[*itr]!=-1&&sp[par[*itr]])jisuu++; for(ll x:g[*itr]){ if(sp[x])jisuu++; if(jisuu>1)break; } assert(jisuu); if(jisuu==1){ id[i]=id[*itr]; prev=*itr; sp[*itr]=false; S.erase(itr); break; } itr++; } memo[i]=S; } for(ll x:g[i])dfs2(x); if(prev!=-1){ sp[i]=false; S.erase(i); S.insert(prev); sp[prev]=true; } };dfs2(0); vb use(n,false);vi num(n); auto itr=memo[p].begin(); rep(i,60){ use[*itr]=true; itr++; } num[p]=v; REP(i,1,n)g[i].pb(par[i]); function<void(ll,ll)> slv=[&](ll i,ll prv){ for(ll x:g[i])if(x!=prv&&use[x]){ num[x]=Move(x); slv(x,i); Move(i); } };slv(p,-1); ll ans=0; rep(i,n)if(use[i])ans+=num[i]<<id[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...