Submission #886400

#TimeUsernameProblemLanguageResultExecution timeMemory
886400Zero_OP스파이 (JOI13_spy)C++14
100 / 100
88 ms21120 KiB
#include<bits/stdc++.h> using namespace std; const int N=2005; const int M=5e5+5; int n, m, root[2], dfs_timer[2], tin[2][N], tout[2][N], diff[N][N]; vector<int> g[2][N]; void dfs_euler(int type, int u, int e){ tin[type][u]=++dfs_timer[type]; for(int i=0; i<g[type][u].size(); ++i){ int v=g[type][u][i]; if(v!=e){ dfs_euler(type, v, u); } } tout[type][u]=dfs_timer[type]; } void update_intersection(int x1, int y1, int x2, int y2){ ++diff[x1][x2]; --diff[x1][y2+1]; --diff[y1+1][x2]; ++diff[y1+1][y2+1]; } int main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); if(fopen("a.inp", "r")){ freopen("a.inp", "r", stdin); freopen("a.out", "w", stdout); } cin>>n>>m; for(int i=1; i<=n; ++i){ int u, v; cin>>u>>v; if(!u) root[0]=i; else g[0][u].push_back(i); if(!v) root[1]=i; else g[1][v].push_back(i); } dfs_euler(0, root[0], root[0]); dfs_euler(1, root[1], root[1]); for(int i=1; i<=m; ++i){ int u, v; cin>>u>>v; update_intersection(tin[0][u], tout[0][u], tin[1][v], tout[1][v]); } for(int i=1; i<=n; ++i){ for(int j=1; j<=n; ++j){ diff[i][j]+=diff[i-1][j]+diff[i][j-1]-diff[i-1][j-1]; } } for(int i=1; i<=n; ++i){ cout<<diff[tin[0][i]][tin[1][i]]<<'\n'; } return 0; }

Compilation message (stderr)

spy.cpp: In function 'void dfs_euler(int, int, int)':
spy.cpp:13:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   13 |  for(int i=0; i<g[type][u].size(); ++i){
      |               ~^~~~~~~~~~~~~~~~~~
spy.cpp: In function 'int main()':
spy.cpp:34:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |   freopen("a.inp", "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
spy.cpp:35:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |   freopen("a.out", "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...