제출 #208088

#제출 시각아이디문제언어결과실행 시간메모리
208088BlerarghBosses (BOI16_bosses)C++17
67 / 100
1586 ms4112 KiB
#include "bits/stdc++.h"
using namespace std;
 
#define int long long
 
bool vis[5005];
int n,k,a,ans=INT_MAX;
int preorder[5005],nex;
int cur,nodes;
vector<int> children[5005];
stack<int> children2[5005];
 
void dfs(int x){//returns salary of employee x...
  preorder[x]=nex++;
  while(!children2[x].empty()){
    a=children2[x].top();
    children2[x].pop();
    dfs(a);
  }
  cur+=nex-preorder[x];
}
 
int32_t main() {
    ios_base::sync_with_stdio(false);cin.tie(0);
    queue<int> bfs;
    cin>>n;
    for(int x=1;x<=n;x++){
      cin>>k;
      while(k--){
        cin>>a;
        children[a].emplace_back(x);
      }
    }
 
    for(int x=1;x<=n;x++){
      for(int i=1;i<=n;i++){
        vis[i]=0;
        while(!children2[i].empty())children2[i].pop();
      }
      bfs.emplace(x);vis[x]=1;
      nodes=0;
      while(!bfs.empty()){
        nodes++;
        a=bfs.front();
        bfs.pop();
        for(auto edge : children[a]){
          if(!vis[edge]){
            vis[edge]=true;
            bfs.emplace(edge);
            children2[a].emplace(edge);
          }
        }
      }
      if(nodes!=n)continue;
      cur=0;
      nex=1;
      dfs(x);
      ans=min(ans,cur);
    }
    cout<<ans<<'\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...