Submission #1244506

#TimeUsernameProblemLanguageResultExecution timeMemory
1244506tvgk스파이 (JOI13_spy)C++20
100 / 100
165 ms129508 KiB
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 2e3 + 7, mxX = 5e5 + 2;

bitset<mxX> mut, ans[mxN];
vector<int> querry[mxN][2], w[mxN][2];
int n, q, root[2];

void DFS(int j, bool id)
{
    for (int i : querry[j][id])
        mut.set(i - 1);

    if (!id)
        ans[j] = mut;
    else
        ans[j] &= mut;

    for (int i : w[j][id])
        DFS(i, id);

    for (int i : querry[j][id])
        mut.reset(i - 1);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    //freopen(task".INP", "r", stdin);
    //freopen(task".OUT", "w", stdout);

    cin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        for (int u = 0; u <= 1; u++)
        {
            int par;
            cin >> par;
            w[par][u].push_back(i);
        }
    }

    for (int i = 1; i <= q; i++)
    {
        for (int u = 0; u <= 1; u++)
        {
            int par;
            cin >> par;
            querry[par][u].push_back(i);

            if (!par)
                root[u] = i;
        }
    }
    DFS(root[0], 0);
    DFS(root[1], 1);

    for (int i = 1; i <= n; i++)
        cout << ans[i].count() << '\n';
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...