Submission #1052586

#TimeUsernameProblemLanguageResultExecution timeMemory
1052586MalixBosses (BOI16_bosses)C++14
100 / 100
702 ms1104 KiB
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef pair<int,int> pi;
typedef vector<pi> pii;
typedef tuple<int,int,int> tii;
typedef vector<ll> li;
typedef vector<li> lii;
 
#define REP(i,a,b) for(int i=a;i<b;i++)
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define LSOne(s) ((s)&(-s))
 
ll INF=1e18+10;
int inf=1e9+10;
ll M=1e9+7;

int main() {   
// ios::sync_with_stdio(0);
// cin.tie(0);
    int n;cin>>n;
    vii a(n);
    REP(i,0,n){
        int x;cin>>x;
        while(x--){
            int y;cin>>y;
            y--;
            a[y].PB(i);
        }
    }
    int ans=inf;
    REP(i,0,n){
        vi vis(n,0);
        queue<int> pq;
        vi p(n,-1);
        p[i]=-2;vis[i]=1;
        pq.push(i);vi c(n,0);
        queue<pi> b;
        while(!pq.empty()){
            int x=pq.front();
            pq.pop();
            int k=0;
            for(auto u:a[x]){
                if(p[u]==-1&&vis[u]==0){   
                    vis[u]=1;
                    k++;
                    c[x]++;
                    pq.push(u);
                    p[u]=x;
                }
            }
            if(k==0)b.push({x,1});
        }
        bool flag=1;int count=0;
        REP(i,0,n)if(vis[i]==0)flag=0;
        if(flag==0)continue;
        vi val(n,0);
        while(!b.empty()){
            int x=b.front().F;
            int y=b.front().S;
            b.pop();count+=y;
            if(p[x]<0)continue;
            c[p[x]]--;val[p[x]]+=y;
            if(c[p[x]]==0)b.push({p[x],val[p[x]]+1});
        }
        ans=min(ans,count);
    }
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...