Submission #212727

#TimeUsernameProblemLanguageResultExecution timeMemory
212727patrikpavic2스파이 (JOI13_spy)C++17
100 / 100
170 ms8184 KiB
#include <cstdio> #include <vector> #define PB push_back using namespace std; const int N = 2e3 + 50; int rootA, rootB; vector < int > vA[N], vB[N]; vector < int > skim[N]; int L[N], R[N], cur = 1, loga[N], sol[N], n, q; void dfs(int x){ L[x] = cur++; for(int y : vB[x]) dfs(y); R[x] = cur; } void add(int x, int y){ for(; x < N ; x += x & -x) loga[x] += y; } int query(int x){ int ret = 0; for(; x ; x -= x & -x) ret += loga[x]; return ret; } void rijesi(int x){ for(int y : skim[x]) add(L[y], 1), add(R[y], -1); sol[x] = query(L[x]); for(int y : vA[x]) rijesi(y); for(int y : skim[x]) add(L[y], -1), add(R[y], 1); } int main(){ scanf("%d%d", &n, &q); for(int i = 1;i <= n;i++){ int x, y; scanf("%d%d", &x, &y); if(!x) rootB = i; else vB[x].PB(i); if(!y) rootA = i; else vA[y].PB(i); } for(int i = 0;i < q;i++){ int x, y; scanf("%d%d", &x, &y); skim[y].PB(x); } dfs(rootB); rijesi(rootA); for(int i = 1;i <= n;i++) printf("%d\n", sol[i]); }

Compilation message (stderr)

spy.cpp: In function 'int main()':
spy.cpp:46:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &n, &q);
  ~~~~~^~~~~~~~~~~~~~~~
spy.cpp:48:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int x, y; scanf("%d%d", &x, &y);
             ~~~~~^~~~~~~~~~~~~~~~
spy.cpp:55:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int x, y; scanf("%d%d", &x, &y);
             ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...