Submission #1349109

#TimeUsernameProblemLanguageResultExecution timeMemory
1349109NValchanovBitaro’s Party (JOI18_bitaro)C++20
0 / 100
3 ms4932 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

#define endl '\n'

using namespace std;

const int MAXN = 1e5 + 10;
const int MAXM = 2e5 + 10;
const int MAXQ = 1e5 + 10;

int n, m, q;
vector < int > adj[MAXN];
int dp[MAXN];
int t[MAXN];
int k[MAXN];
set < int > busy[MAXQ];

void read()
{
    cin >> n >> m >> q;

    for(int i = 1; i <= m; i++)
    {
        int u, v;
        cin >> u >> v;

        adj[v].push_back(u);
    }

    for(int i = 1; i <= q; i++)
    {
        cin >> t[i] >> k[i];

        for(int j = 0; j < k[i]; j++)
        {
            int s;
            cin >> s;

            busy[i].insert(s);
        }
    }
}

void dfs(int u)
{
    for(int& v : adj[u])
    {
        dp[v] = max(dp[v], dp[u] + 1);

        dfs(v);
    }
}

void process_queries()
{
    for(int i = 1; i <= q; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            dp[j] = 0;
        }

        dfs(t[i]);

        int ans = 0;

        for(int j = 1; j < t[i]; j++)
        {
            if(busy[i].find(j) != busy[i].end())
                continue;

            ans = max(ans, dp[j]);
        }

        cout << ans << endl;
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    read();
    process_queries();

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...