# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
886400 | Zero_OP | 스파이 (JOI13_spy) | C++14 | 88 ms | 21120 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |