제출 #567499

#제출 시각아이디문제언어결과실행 시간메모리
567499Abdulmohsen1284Bitaro’s Party (JOI18_bitaro)C++14
14 / 100
303 ms34496 KiB
#include"bits/stdc++.h"
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template<class x>
using ordered_set = tree<x, null_type,less<x>, rb_tree_tag,tree_order_statistics_node_update>;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
priority_queue < pair <int, int> > pat[100005];
const int inf=1e9;
int num[100005],c[100005];
vector <int> tr[100005];
bool la[100005];
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    long long n,m,q;
    cin>>n>>m>>q;
    for(int i=0;i<m;i++)
    {
        long long fr,sc;
        cin>>fr>>sc;
        if(fr<sc)
            swap(fr,sc);
        tr[sc].push_back(fr);
    }
    int sq=ceil((double)sqrt(q));
    sq++;
    if(sq>100)
    {
        sq/=18;
    }
    for(int i=1;i<=n;i++)
    {
        pat[i].push({0,i});
        //auto cur = pat[i].top();
        for(auto j : tr[i])
        {
            priority_queue < pair < int, int> > ne,ai,aj;
            ai=pat[i];
            aj=pat[j];
            while(ne.size()<sq)
            {
                
                //cout<<"chek1"<<endl;
                if(!ai.empty()&&!aj.empty())
                {
                    auto rn1=ai.top(),rn2=aj.top();
                    //cout<<"1"<<endl;
                    if(rn1.first<rn2.first)
                    {
                        ne.push(rn2);
                        aj.pop();
                    }
                    else
                    {
                        ne.push({rn1.first+1,rn1.second});
                        ai.pop();
                    }
                }
                else if(!ai.empty())
                {
                    //cout<<"2"<<endl;
                    auto rn1=ai.top();
                    ne.push({rn1.first+1,rn1.second});
                    ai.pop();
                }
                else if(!aj.empty())
                {
                    //cout<<"3"<<endl;
                    auto rn2=aj.top();
                    ne.push(rn2);
                    aj.pop();
                }
                else{
                    //cout<<"4"<<endl;
                    break;
                }
                //cout<<"HI"<<endl;
            }
            pat[j]=ne;
        }
    }
    for(int i=0;i<q;i++)
    {
        long long t,y;
        cin>>t>>y;
        if(y>=sq)
        {
            //cout<<"hell ye ";
            for(int j=0;j<y;j++)
            {
                long long bad;
                cin>>bad;
                num[bad]=-inf;
            }
            for(int j=1;j<=n;j++)
            {
                for(auto k : tr[j])
                {
                    num[k]=max(num[k],num[j]+1);
                }
            }
            cout<<max(-1,num[t])<<"\n";
            for(int j=1;j<=n;j++)
                num[j]=0;
        }
        else
        {
            //cout<<"yo ";
            for(int j=0;j<y;j++)
            {
                cin>>c[i];
                la[c[i]]=true;
            }
            int ans=-1;
            auto rn = pat[t];
            while(!rn.empty())
            {
                auto here = rn.top();
                rn.pop();
                //cout<<here.second<<" ";
                if(!la[here.second])
                    ans=max(ans,here.first);
            }
            for(int j=0;j<y;j++)
            {
                la[c[i]]=false;
            }
            cout<<ans<<"\n";
        }
    }
}

컴파일 시 표준 에러 (stderr) 메시지

bitaro.cpp: In function 'int main()':
bitaro.cpp:44:28: warning: comparison of integer expressions of different signedness: 'std::priority_queue<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |             while(ne.size()<sq)
      |                   ~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...