제출 #415752

#제출 시각아이디문제언어결과실행 시간메모리
415752AntekbRegions (IOI09_regions)C++14
100 / 100
4951 ms130604 KiB
#include<bits/stdc++.h> using namespace std; const int N=500, M=25000, K=200000; vector<int> E[K]; int R[K], pre[K], post[K], ile3[M], sta[M], sta2[M]; vector<int> pocz[M], kon[M]; int ile[M][N], ile2[M][N], gdzie[M]; vector<int> duz; int wsk=0; void dfs(int v){ //cout<<v<<"q\n"; pre[v]=wsk++; pocz[R[v]].push_back(pre[v]); sta[R[v]]++; sta2[R[v]]++; for(int i=0; i<duz.size(); i++){ ile[R[v]][i]-=sta[duz[i]]; ile2[R[v]][i]+=sta2[duz[i]]; } for(int u:E[v]){ dfs(u); } for(int i=0; i<duz.size(); i++){ ile[R[v]][i]+=sta[duz[i]]; } sta2[R[v]]--; post[v]=wsk; kon[R[v]].push_back(post[v]); } int main(){ int n, r, q; cin>>n>>r>>q; for(int i=0; i<n ;i++){ int h, p; if(i){ cin>>p; p--; E[p].push_back(i); } cin>>R[i]; --R[i]; ile3[R[i]]++; } for(int i=0; i<r; i++){ if(ile3[i]>=N){ duz.push_back(i); gdzie[i]=duz.size(); } } dfs(0); for(int i=0;i<q; i++){ int r1, r2; cin>>r1>>r2; r1--; r2--; if(gdzie[r1]){ cout<<ile2[r2][gdzie[r1]-1]; } else if(gdzie[r2]){ cout<<ile[r1][gdzie[r2]-1]; } else{ //cout<<"a"; int ans=0; for(int i=0; i<pocz[r1].size(); i++){ // cout<<"b"; ans+=(lower_bound(pocz[r2].begin(), pocz[r2].end(), kon[r1][i])-lower_bound(pocz[r2].begin(), pocz[r2].end(), pocz[r1][i])); } cout<<ans; } cout<<endl; } }

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

regions.cpp: In function 'void dfs(int)':
regions.cpp:16:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for(int i=0; i<duz.size(); i++){
      |                  ~^~~~~~~~~~~
regions.cpp:23:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |     for(int i=0; i<duz.size(); i++){
      |                  ~^~~~~~~~~~~
regions.cpp: In function 'int main()':
regions.cpp:34:13: warning: unused variable 'h' [-Wunused-variable]
   34 |         int h, p;
      |             ^
regions.cpp:66:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |             for(int i=0; i<pocz[r1].size(); i++){
      |                          ~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...