Submission #754453

#TimeUsernameProblemLanguageResultExecution timeMemory
754453Valters07Bitaro’s Party (JOI18_bitaro)C++14
14 / 100
1317 ms230728 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#define fio ios_base::sync_with_stdio(0);cin.tie(0);
#define ll long long
#define en cin.close();return 0;
#define pb push_back
#define fi first//printf("%lli\n",cur);
#define se second//scanf("%lli",&n);
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 1e5+5;
const int B = sqrt(N)+2;
vector<int> g[N];
vector<pair<int,int> > best[N];
int dist[N];
bool dupl[N];
void merg_sort(vector<pair<int,int> > &a, vector<pair<int,int> > b)
{
    for(auto &x:b)
        x.fi++;
    vector<pair<int,int> > nw;
    int it = 0, it2 = 0;
    while((it<a.size()||it2<b.size())&&nw.size()<B)
    {
        if(it>=a.size())
            nw.pb(b[it2++]);
        else if(it2>=b.size())
            nw.pb(a[it++]);
        else if(a[it]>b[it2])
            nw.pb(a[it++]);
        else
            nw.pb(b[it2++]);
    }
    a.clear();
    for(auto x:nw)
        if(!dupl[x.se])
            a.pb(x),
            dupl[x.se]=1;
    for(auto x:nw)
        dupl[x.se]=0;
}
int main()
{
    fio
//    ifstream cin("in.in");
    int n, m, q;
    cin >> n >> m >> q;
    while(m--)
    {
        int u, v;
        cin >> u >> v;
        g[u].pb(v);
    }
    for(int i = 1;i<=n;i++)
        best[i].pb({0,i});
    for(int i = 1;i<=n;i++)
        for(auto j:g[i])
            merg_sort(best[j],best[i]);
    while(q--)
    {
        int f, y;
        cin >> f >> y;
        vector<int> del(y);
        for(auto &x:del)
            cin >> x;
        if(y<B)
        {
            for(auto x:del)
                dupl[x]=1;
            int it = 0;
            while(it<best[f].size()&&dupl[best[f][it].se])
                it++;
            if(it>=best[f].size())
                cout << -1;
            else
                cout << best[f][it].fi;
            for(auto x:del)
                dupl[x]=0;
        }
        else
        {
            for(int i = 1;i<=n;i++)
                dist[i]=0;
            for(auto x:del)
                dist[x]=-1e9;
            for(int i = 1;i<=n;i++)
                for(auto j:g[i])
                    dist[j]=max(dist[j],dist[i]+1);
            if(dist[f]<0)
                cout << -1;
            else
                cout << dist[f];
        }
        cout << "\n";
    }
//    cin.close();
    return 0;
}

Compilation message (stderr)

bitaro.cpp: In function 'void merg_sort(std::vector<std::pair<int, int> >&, std::vector<std::pair<int, int> >)':
bitaro.cpp:24:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     while((it<a.size()||it2<b.size())&&nw.size()<B)
      |            ~~^~~~~~~~~
bitaro.cpp:24:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     while((it<a.size()||it2<b.size())&&nw.size()<B)
      |                         ~~~^~~~~~~~~
bitaro.cpp:26:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |         if(it>=a.size())
      |            ~~^~~~~~~~~~
bitaro.cpp:28:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |         else if(it2>=b.size())
      |                 ~~~^~~~~~~~~~
bitaro.cpp: In function 'int main()':
bitaro.cpp:72:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |             while(it<best[f].size()&&dupl[best[f][it].se])
      |                   ~~^~~~~~~~~~~~~~~
bitaro.cpp:74:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |             if(it>=best[f].size())
      |                ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...