Submission #163204

#TimeUsernameProblemLanguageResultExecution timeMemory
163204TadijaSebez스파이 (JOI13_spy)C++11
100 / 100
476 ms21376 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back const int N=2050; int sum[N][N]; void Add(int x, int y, int f) { for(int i=x;i<N;i+=i&-i) for(int j=y;j<N;j+=j&-j) sum[i][j]+=f; } void Add(int x1, int x2, int y1, int y2) { Add(x1,y1,1); Add(x2+1,y1,-1); Add(x1,y2+1,-1); Add(x2+1,y2+1,1); } int Get(int x, int y) { int ans=0; for(int i=x;i;i-=i&-i) for(int j=y;j;j-=j&-j) ans+=sum[i][j]; return ans; } struct Tree { vector<int> E[N]; int lid[N],rid[N],tid,root; Tree(){} void AddEdge(int u, int p) { if(p==0) root=u; else E[p].pb(u); } void DFS(int u){ lid[u]=++tid;for(int v:E[u]) DFS(v);rid[u]=tid;} void Euler(){ DFS(root);} } JOI,IOI; int main() { int n,m,p,q; scanf("%i %i",&n,&m); for(int i=1;i<=n;i++) { scanf("%i %i",&p,&q); JOI.AddEdge(i,p); IOI.AddEdge(i,q); } JOI.Euler(); IOI.Euler(); while(m--) { int e,s; scanf("%i %i",&e,&s); Add(JOI.lid[e],JOI.rid[e],IOI.lid[s],IOI.rid[s]); } for(int i=1;i<=n;i++) printf("%i\n",Get(JOI.lid[i],IOI.lid[i])); return 0; }

Compilation message (stderr)

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