Submission #350838

#TimeUsernameProblemLanguageResultExecution timeMemory
350838MHNaderiBosses (BOI16_bosses)C++14
100 / 100
865 ms1020 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define all(x) x.begin() , x.end()
#define file_init freopen("input.txt", "r+", stdin); freopen("output.txt", "w+", stdout);
#define random_init mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
#define int long long
#define pb push_back
#define pii pair<int,int>
#define F first
#define S second
const int maxn=1e4,INF=1e18;
int dis[maxn],mark[maxn],cntd[maxn];
vector<int> m[maxn];
inline int BFS(int u,int n){
    queue<int> q;
    q.push(u);
    mark[u]=1;
    dis[u]=1;
    cntd[dis[u]]=1;
    int mx=0;
//    cout<<"####"<<u<<"####"<<'\n';
    while(q.size()){
        u=q.front();
        for(int v : m[u]){
            if(!mark[v]){
                dis[v]=dis[u]+1;
                cntd[dis[v]]++;
                mark[v]=1;
                q.push(v);
            }
        }
        mx=dis[u];
        q.pop();
    }
    int ans=0,sum=0;
    for(int i=mx;i>0;i--){
        sum+=cntd[i];
        ans+=sum;
//        cout<<i<<" "<<cntd[i]<<'\n';
    }
    int cnt=0;
    for(int i=0;i<=n;i++){
        if(mark[i]) cnt++;
        dis[i]=cntd[i]=mark[i]=0;
    }
    if(cnt<n) return -1;
    return ans;
}
int mk[maxn];
void DFS(int u){
    mk[u]=1;
    for(int v : m[u]){
        if(!mk[v]) DFS(v);
    }
}
int32_t main(){
	ios_base::sync_with_stdio(0);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
        int k; cin>>k;
        for(int j=0;j<k;j++){
            int x; cin>>x;
            m[x].pb(i);
        }
	}
    int ans=INF;
    for(int i=1;i<=n;i++){
        int x=BFS(i,n);
        if(x!=-1)
        ans=min(ans,x);
    }
    cout<<(ans==INF ? -1 : ans);
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...