Submission #754443

#TimeUsernameProblemLanguageResultExecution timeMemory
754443Valters07Bitaro’s Party (JOI18_bitaro)C++14
14 / 100
1137 ms411580 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];
bool dupl[N];
void merg_sort(vector<pair<int,int> > &a, vector<pair<int,int> > b)
{
    for(auto &x:b)
        x.fi++,
        dupl[x.se]=1;
    vector<pair<int,int> > nw, nwa;
    for(auto x:a)
        if(!dupl[x.se])
            nwa.pb(x);
    swap(a,nwa);
    for(auto x:b)
        dupl[x.se]=0;
    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++]);
    }
    swap(a,nw);
}
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
        {
            vector<int> dist(n+1);
            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:30: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]
   30 |     while((it<a.size()||it2<b.size())&&nw.size()<=B)
      |            ~~^~~~~~~~~
bitaro.cpp:30: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]
   30 |     while((it<a.size()||it2<b.size())&&nw.size()<=B)
      |                         ~~~^~~~~~~~~
bitaro.cpp:32: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]
   32 |         if(it>=a.size())
      |            ~~^~~~~~~~~~
bitaro.cpp:34: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]
   34 |         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...