제출 #704141

#제출 시각아이디문제언어결과실행 시간메모리
704141karrigan스파이 (JOI13_spy)C++14
0 / 100
127 ms16540 KiB
#include<bits/stdc++.h>
using namespace std;
int tme=0;
int in[2009];
int out[2009];
vector<int>a[2009];
vector<int>b[2009];
int num[2009][2009];
//int dp[2009][2009];
int p[2009];
bool cmp(int i,int j){
return in[i]<in[j];
}
void dfs2(int u,int par){
in[u]=++tme;
p[u]=par;
for (auto v:b[u])dfs2(v,u);
out[u]=tme;
}
vector<int>id;
void dfs(int u){
for (auto v:a[u]){
    for (auto v1:id){
        num[v][v1]+=num[v][p[v1]];
    }
    for (auto v1:id){
        num[v][v1]+=num[u][v1];
        num[v][v1]+=num[u][p[v1]];
    }
    dfs(v);
}
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int r1=0,r2=0;
    int n,m;
    cin>>n>>m;
    for (int i=1;i<=n;i++){
        id.push_back(i);
        int x,y;
        cin>>x>>y;
        if (x==0)r1=i;
        else a[x].push_back(i);
        if (y==0)r2=i;
        else b[y].push_back(i);
    }
    dfs2(r2,0);
    for (int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        num[x][y]++;
    }
    sort(id.begin(),id.end(),cmp);
    dfs(r1);
    for (int i=1;i<=n;i++){
        cout<<num[i][i]<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...