Submission #676152

#TimeUsernameProblemLanguageResultExecution timeMemory
676152Cookie스파이 (JOI13_spy)C++14
100 / 100
342 ms249864 KiB
#include<bits/stdc++.h>
 
#include<fstream>
 
using namespace std;

#define ll long long
#define vt vector
#define pb push_back
#define fi first
#define se second
#define forr(i, a, b) for(int i = a; i < b; i++)
#define dorr(i, a, b) for(int i = a; i >= b; i--)
#define pii pair<int, int>
#define pll pair<ll, ll>
//#define int long long
typedef unsigned long long ull;
const int mxn = 2e3, mxm = 5e5;
bitset<mxm>ioi[mxn + 1], joi[mxn + 1];
int p[mxn + 1], q[mxn + 1];
int n, m, rootj, rooti;
vt<int>adj[mxn + 1], g[mxn + 1]; 
void dfs(int s, int pre){
    for(auto i: adj[s]){
        joi[i] |= joi[s];
        dfs(i, s);
    }
}
void dfs2(int s, int pre){
    for(auto i: g[s]){
        ioi[i] |= ioi[s];
        dfs2(i, s);
    }
}
signed main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        cin >> p[i];
        if(p[i])adj[p[i]].pb(i);
        else rootj = i;
        cin >> q[i];
        if(q[i])g[q[i]].pb(i);
        else rooti = i;
    }
    for(int i = 0; i < m; i++){
        int r, b; cin >> r >> b;
        joi[r][i] = 1; ioi[b][i] = 1;
    }
    dfs(rootj, -1); dfs2(rooti, -1);
    for(int i = 1; i <= n; i++){
        cout << (joi[i] & ioi[i]).count() << "\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...