Submission #531613

#TimeUsernameProblemLanguageResultExecution timeMemory
531613Koosha_mvSailing Race (CEOI12_race)C++14
5 / 100
288 ms2552 KiB
#include <bits/stdc++.h> using namespace std; #define dbgv(v) cout<<#v<<" = "; f(i,0,v.size()) cout<<v[i]<<" "; cout<<endl #define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl #define erorp(x) cout<<#x<<"={"<<(x.F)<<" , "<<x.S<<"}"<<endl #define eror(x) cout<<#x<<'='<<(x)<<endl #define f_(i,a,b) for(int i=a;i>=b;i--) #define f(i,a,b) for(int i=a;i<b;i++) #define nb(x) __builtin_popcount(x) #define all(v) v.begin(),v.end() #define bit(n,k) (((n)>>(k))&1) #define Add(x,y) x=(x+y)%mod #define maxm(a,b) a=max(a,b) #define minm(a,b) a=min(a,b) #define lst(x) x[x.size()-1] #define sz(x) int(x.size()) #define mp make_pair #define ll long long #define pb push_back #define S second #define F first const int N=505; int n,k,ans,cnt,a[N],deg[N],dp[N][N],pd[N][N]; vector<int> vec,g[N]; void calcdp(int u,int x){ for(auto v : g[u]){ int dist=(v-u+n)%n; if(dist<=x){ maxm(dp[u][x],dp[v][x-dist]+1); maxm(dp[u][x],pd[v][dist-1]+1); } } if(dp[u][x]+(k==1 && deg[u])>ans){ vec.clear(); ans=dp[u][x]+(k==1 && deg[u]); } if(dp[u][x]+(k==1 && deg[u])==ans){ vec.pb(u); } //cout<<"dp "<<u<<" "<<x<<" -> "<<dp[u][x]<<endl; } void calcpd(int u,int x){ for(auto v : g[u]){ int dist=(u-v+n)%n; if(dist<=x){ maxm(pd[u][x],pd[v][x-dist]+1); maxm(pd[u][x],dp[v][dist-1]+1); } } maxm(ans,pd[u][x]+(k==1 && deg[u])); //cout<<"pd "<<u<<" "<<x<<" -> "<<pd[u][x]<<endl; } int main(){ ios:: sync_with_stdio(0), cin.tie(0), cout.tie(0); cin>>n>>k; //if(k==1) assert(0); f(i,0,n){ int x; cin>>x; while(x>0){ deg[x-1]=1; g[i].pb(x-1); cin>>x; } } f(t,1,n){ f(i,0,n){ calcdp(i,t); calcpd(i,t); } } f(i,0,n) if(dp[i][n-1]==ans || pd[i][n-1]==ans) cnt++; cout<<ans<<endl<<cnt; } /* 7 0 5 0 5 0 7 0 3 0 4 0 4 3 0 2 1 0 */
#Verdict Execution timeMemoryGrader output
Fetching results...