제출 #336585

#제출 시각아이디문제언어결과실행 시간메모리
336585mehrdad_sohrabiBitaro’s Party (JOI18_bitaro)C++14
100 / 100
1444 ms321900 KiB
#include <bits/stdc++.h>
typedef int ll;
typedef long double ld;
#define pb push_back
#define pii pair < ll , ll >
#define F first
#define S second
#define endl '\n'
//#define int long long
#define sync ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#define kill(x) return cout<<x<<'\n', 0;
using namespace std;
const int N=1e5+100,sq=400;
pii mx[N][sq];
vector <int> g[N];
ll vis[N];
ll dp[N];
int32_t main(){
    sync;
    ll n,m,q;
    cin >> n >> m >> q;
    for (int i=0;i<m;i++){
        ll u,v;
        cin >> v >> u;
        g[u].pb(v);
    }
    for (int i=1;i<=n;i++){
        for (int j=0;j<sq;j++){
            mx[i][j]={-1,-1};
        }
    }
    ll cntt=1;
    for (int i=1;i<=n;i++){
        cntt++;
        vector <int> cnt;
        for (int j=0;j<g[i].size();j++){
            cnt.pb(0);
        }
        if (cnt.size()==0) {
            for (int j=0;j<sq;j++){
                mx[i][j]={0,i};
            }
            continue;
        }
        for (int j=0;j<sq;j++){
            pii p={0,i};
            ll id=0;
            for (int k=0;k<g[i].size();k++){
                ll u=g[i][k];
                ll z=cnt[k];
                if (z<sq && mx[u][z].F>=p.F) p=mx[u][z],id=k,p.F++;
            }
            vis[p.S]=cntt;
          //  cout << p.F << " rfh " << p.S << endl;
      //      cnt[id]++;
            for (int k=0;k<g[i].size();k++){
                ll u=g[i][k];\
                ll z=cnt[k];
                while (cnt[k]<sq && mx[u][cnt[k]].S!=-1 && vis[mx[u][cnt[k]].S]==cntt) cnt[k]++;
            }
            mx[i][j]=p;
           // if (p.F==0) break;
        }
    }
  //  cout << 1 << endl;
    //return 0;
    while(q--){
        cntt++;
        ll w,t;
        cin >> w >> t;
        for (int i=0;i<t;i++){
            ll x;
            cin >> x;
            vis[x]=cntt;
        }
        ll ans=-1;
        for (int i=0;i<sq;i++){
            if (mx[w][i].S==-1) break;
            if (vis[mx[w][i].S]!=cntt){
                ans=mx[w][i].F;
                break;
            }
        }
        if (ans>-1){
            cout << ans << endl;
            continue;
        }
        if ( mx[w][sq-1].S==w || mx[w][sq-1].S==-1) {
            cout << -1 << endl;
            continue;
        }
        for (int i=1;i<=w;i++){
            if (vis[i]==cntt) dp[i]=-1;
            else dp[i]=0;
            for (auto u : g[i]){
                if (dp[u]==-1) continue;
                dp[i]=max(dp[i],dp[u]+1);
            }
        }
        cout << dp[w] << endl;
    }
}

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

bitaro.cpp: In function 'int32_t main()':
bitaro.cpp:37:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |         for (int j=0;j<g[i].size();j++){
      |                      ~^~~~~~~~~~~~
bitaro.cpp:49:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |             for (int k=0;k<g[i].size();k++){
      |                          ~^~~~~~~~~~~~
bitaro.cpp:57:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |             for (int k=0;k<g[i].size();k++){
      |                          ~^~~~~~~~~~~~
bitaro.cpp:59:20: warning: unused variable 'z' [-Wunused-variable]
   59 |                 ll z=cnt[k];
      |                    ^
bitaro.cpp:48:16: warning: variable 'id' set but not used [-Wunused-but-set-variable]
   48 |             ll id=0;
      |                ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...