제출 #1148419

#제출 시각아이디문제언어결과실행 시간메모리
1148419Muhammad_AneeqTeam Coding (EGOI24_teamcoding)C++20
62 / 100
4097 ms49608 KiB
/* بسم الله الرحمن الرحيم Author: (:Muhammad Aneeq:) */ #include <iostream> #include <map> #include <algorithm> #include <vector> #warning check the output using namespace std; int const N=1e5+10; vector<int>nei[N]={}; vector<int>lv[N]={}; map<int,vector<int>>co[N]={}; int it[N],ot[N]; int dp[N]={}; int c[N]={}; int tm=0; map<int,int>*vl[N]={}; int sz[N]={}; void dfs(int u,int h=0) { co[c[u]][h].push_back(u); it[u]=tm++; sz[u]=1; lv[h].push_back(it[u]); for(auto i:nei[u]) dfs(i,h+1),sz[u]+=sz[i]; ot[u]=tm-1; } int ans=1,mx=0; void dfs1(int u) { int x=-1; for (auto i:nei[u]) { dfs1(i); if (x==-1) x=i; if (sz[i]>sz[x]) x=i; } if (x!=-1) vl[u]=vl[x]; else vl[u]=new map<int,int> (); (*vl[u])[c[u]]++; for (auto i:nei[u]) { if (i==x) continue; for (auto [j,k]:*(vl[i])) (*vl[u])[j]+=k; } if (dp[u]>ans) { ans=dp[u]; mx=dp[u]-(*vl[u])[c[u]]; } if (dp[u]==ans) mx=min(mx,dp[u]-(*vl[u])[c[u]]); } int fn(int u,int lev) { int z=lower_bound(begin(lv[lev]),end(lv[lev]),it[u])-begin(lv[lev]); int y=upper_bound(begin(lv[lev]),end(lv[lev]),ot[u])-begin(lv[lev]); return y-z; } int check(int k,int u) { int ans=0,mx=0; for (auto [i,inds]:co[k]) { int sz=fn(u,i); sz=min(sz,int(inds.size())); ans+=sz; } return ans; } inline void solve() { int n,k; cin>>n>>k; for (int i=0;i<n;i++) cin>>c[i]; int pra; bool subt1=1; for (int i=1;i<n;i++) { cin>>pra; if (pra!=i-1) subt1=0; nei[pra].push_back(i); } if (subt1) { map<int,int>cnt; int mx=1; for (int i=n-1;i>=0;i--) { cnt[c[i]]++; mx=max(mx,cnt[c[i]]); } cout<<mx<<' '<<0<<endl;return; } if (k==1) { cout<<n<<' '<<0<<endl;return; } dfs(0); for (int i=0;i<n;i++) dp[i]=check(c[i],i); dfs1(0); cout<<ans<<' '<<mx<<endl; } int main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int t=1; for (int i=1;i<=t;i++) { solve(); } }

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

Main.cpp:11:2: warning: #warning check the output [-Wcpp]
   11 | #warning check the output
      |  ^~~~~~~
#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...