Submission #754420

#TimeUsernameProblemLanguageResultExecution timeMemory
754420Valters07Bitaro’s Party (JOI18_bitaro)C++14
14 / 100
1163 ms413812 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;
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, 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);
    }
    int B = sqrt(n)+1;
    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],B);
    for(int qi = 1;qi<=q;qi++)
    {
        int f, y;
        cin >> f >> y;
        vector<int> del(y);
        for(auto &x:del)
            cin >> x;
        if(y<B)
        {
            int it = 0, it2 = 0;
            while(it<best[f].size()&&it2<del.size())
            {
                if(del[it2]>best[f][it].se)
                    it2++;
                else if(del[it2]==best[f][it].se)
                    it++,
                    it2++;
                else
                    break;
            }
            if(it>=best[f].size())
                cout << -1;
            else
                cout << best[f][it].fi;
        }
        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> >, int)':
bitaro.cpp:29: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]
   29 |     while((it<a.size()||it2<b.size())&&nw.size()<B)
      |            ~~^~~~~~~~~
bitaro.cpp:29: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]
   29 |     while((it<a.size()||it2<b.size())&&nw.size()<B)
      |                         ~~~^~~~~~~~~
bitaro.cpp:29:49: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   29 |     while((it<a.size()||it2<b.size())&&nw.size()<B)
      |                                        ~~~~~~~~~^~
bitaro.cpp:31: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]
   31 |         if(it>=a.size())
      |            ~~^~~~~~~~~~
bitaro.cpp:33: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]
   33 |         else if(it2>=b.size())
      |                 ~~~^~~~~~~~~~
bitaro.cpp: In function 'int main()':
bitaro.cpp:70: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]
   70 |             while(it<best[f].size()&&it2<del.size())
      |                   ~~^~~~~~~~~~~~~~~
bitaro.cpp:70:41: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |             while(it<best[f].size()&&it2<del.size())
      |                                      ~~~^~~~~~~~~~~
bitaro.cpp:80: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]
   80 |             if(it>=best[f].size())
      |                ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...