제출 #162890

#제출 시각아이디문제언어결과실행 시간메모리
162890MvCCat in a tree (BOI17_catinatree)C++11
51 / 100
80 ms12700 KiB
#pragma GCC target("avx2") #pragma GCC optimization("O3") #pragma GCC optimization("unroll-loops") #include <bits/stdc++.h> #define rc(x) return cout<<x<<endl,0 #define pb push_back #define mkp make_pair #define in insert #define er erase #define fd find #define fr first #define sc second typedef long long ll; typedef long double ld; const ll INF=0x3f3f3f3f3f3f3f3f; const ll llinf=(1LL<<62); const int inf=(1<<30); const int nmax=2e3+50; const int mod=1e9+7; using namespace std; int n,k,v[nmax],f[nmax][nmax],x,y,i,sf[nmax],pr[nmax]; vector<int>a[nmax]; void dfs(int x) { int sm=0; for(int i=0;i<(int)a[x].size();i++) { int y=a[x][i]; dfs(y); sm+=f[y][k-1]; } f[x][0]=1+sm; for(int i=1;i<=n;i++) { for(int j=0;j<(int)a[x].size();j++) { int y=a[x][j]; pr[j]=f[y][max(i-1,k-i-1)]; if(j)pr[j]+=pr[j-1]; } for(int j=(int)a[x].size()-1;j>=0;j--) { int y=a[x][j]; sf[j]=f[y][max(i-1,k-i-1)]; if(j<(int)a[x].size()-1)sf[j]+=sf[j+1]; } for(int j=0;j<(int)a[x].size();j++) { int y=a[x][j]; sm=f[y][i-1]; if(j)sm+=pr[j-1]; if(j<(int)a[x].size()-1)sm+=sf[j+1]; f[x][i]=max(f[x][i],sm); } } for(int i=n;i>=0;i--)f[x][i]=max(f[x][i],f[x][i+1]); } int main() { //freopen("sol.in","r",stdin); //freopen("sol.out","w",stdout); //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0); cin>>n>>k; //for(i=1;i<=n;i++)cin>>v[i]; for(i=2;i<=n;i++) { cin>>x; x++; a[x].pb(i); } dfs(1); cout<<f[1][0]<<endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

catinatree.cpp:2:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("O3")
 
catinatree.cpp:3:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("unroll-loops")
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...