제출 #915001

#제출 시각아이디문제언어결과실행 시간메모리
915001AiperiiiBosses (BOI16_bosses)C++14
100 / 100
877 ms1360 KiB
#include <bits/stdc++.h>
#define int long long
#define ff first
#define ss second
#define pb push_back
#define all(x) x.begin(),x.end()
using namespace std;
const int N=5e3+5;
vector <int> g[N];
vector <int> g2[N];
int sum[N];
int t=0;
void dfs(int v,int p){
   for(auto to : g2[v]){
      if(to!=p){
         dfs(to,v);
      }
   }
   sum[v]++;
   sum[p]+=sum[v];
   t+=sum[v];
}
signed main(){
   ios_base::sync_with_stdio();
   cin.tie(0);cout.tie(0);
   int n;
   cin>>n;
   for(int i=1;i<=n;i++){
      int k;
      cin>>k;
      while(k--){
         int x;
         cin>>x;
         g[x].pb(i);
      }
   }
   int mn=1e18;
   queue <int> q;
   for(int i=1;i<=n;i++){
      q.push(i);
      for(int j=1;j<=n;j++){
         g2[j].clear();
         sum[j]=0;
      }
      t=0;
      vector <int> vis(n+1);
      vis[i]=1;
      while(!q.empty()){
         int v=q.front();
         q.pop();
         for(auto to : g[v]){
            if(!vis[to]){
               vis[to]=1;
               g2[v].pb(to);
               q.push(to);
            }
         }
      }
      bool ok=1;
      for(int j=1;j<=n;j++){
         if(!vis[j]){ok=0;break;}
      }
      if(ok){
         dfs(i,0);
         mn=min(mn,t);
      }
   }
   cout<<mn<<"\n";
}
/*
4
1 4
3 1 3 4
2 1 2
1 3
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...