제출 #106488

#제출 시각아이디문제언어결과실행 시간메모리
106488wilwxkRegions (IOI09_regions)C++11
10 / 100
508 ms131072 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN=2e5+5; const int MAXC=25005; const int T=200; vector<int> g[MAXN]; int cor[MAXN], tam[MAXN], ind[MAXN], indg[MAXN]; int dp[MAXN][1005]; int precalc[1005][MAXC]; vector<int> v, lista[MAXN], grandes; int n, r, q; void dfs(int cur, int p) { tam[cur]=1; ind[cur]=v.size(); v.push_back(cor[cur]); for(int i=1; i<grandes.size(); i++) dp[cur][i]=dp[p][i]; if(cur!=p) dp[cur][indg[cor[p]]]++; for(auto viz : g[cur]) { if(viz==p) continue; dfs(viz, cur); tam[cur]+=tam[viz]; } } int main() { scanf("%d %d %d", &n, &r, &q); grandes.push_back(0); for(int i=1; i<=n; i++) { int a; if(i!=1)scanf("%d", &a); scanf("%d", &cor[i]); if(i!=1) g[i].push_back(a), g[a].push_back(i); lista[cor[i]].push_back(i); if(lista[cor[i]].size()==1) grandes.push_back(cor[i]), indg[cor[i]]=grandes.size()-1; } v.push_back(0); dfs(1, 1); // for(int i=1; i<=n; i++) { // printf("vertice %d: tam %d // cor %d // ind %d\n ", i, tam[i], cor[i], ind[i]); // for(int j=1; j<grandes.size(); j++) printf("%d ", dp[i][j]); printf("\n"); // } for(int i=1; i<=n; i++) { for(int j=1; j<grandes.size(); j++) { precalc[j][cor[i]]+=dp[i][j]; // printf("precalc[%d][cor[%d]=%d]= %d\n", j, i, cor[i], precalc[j][cor[i]]); } } // for(int i=1; i<=r; i++) printf("cor %d: lista[].size()= %d // indg[]= %d\n", i, lista[i].size(), indg[i]); while(q--) { int a, b; scanf("%d %d", &a, &b); if(indg[a]) { printf("%d\n", precalc[indg[a]][b]); fflush(stdout); continue; } } }

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

regions.cpp: In function 'void dfs(int, int)':
regions.cpp:19:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=1; i<grandes.size(); i++) dp[cur][i]=dp[p][i];
               ~^~~~~~~~~~~~~~~
regions.cpp: In function 'int main()':
regions.cpp:50:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=1; j<grandes.size(); j++) {
                ~^~~~~~~~~~~~~~~
regions.cpp:30:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d %d", &n, &r, &q);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:34:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int a; if(i!=1)scanf("%d", &a);
                  ~~~~~^~~~~~~~~~
regions.cpp:35:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &cor[i]);
   ~~~~~^~~~~~~~~~~~~~~
regions.cpp:59:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int a, b; scanf("%d %d", &a, &b);
             ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...