제출 #239223

#제출 시각아이디문제언어결과실행 시간메모리
239223aggu_01000101Bosses (BOI16_bosses)C++14
67 / 100
1546 ms1144 KiB
#include <bits/stdc++.h> #define int long long #define INF 1000000000000000 #define lchild(i) (i*2 + 1) #define rchild(i) (i*2 + 2) #define mid(l, u) ((l+u)/2) #define x(p) p.first #define y(p) p.second #define MOD 998244353 using namespace std; int cost = 0; int calcost(int i, vector<int> adj[]){ int sum = 0; for(int j: adj[i]){ sum+=calcost(j, adj); } //cout<<"node "<<i<<" value "<<(sum+1)<<"\n"; cost += (sum + 1); return (sum + 1); } signed main(){ int n; cin>>n; vector<int> children[n+1]; for(int i =0 ;i<n;i++){ int k; cin>>k; while(k--){ int par; cin>>par; children[par].push_back(i+1); } } int ans = INF; for(int i = 1;i<=n;i++){ vector<int> adj[n+1]; bool chosen[n+1]; for(int j = 0;j<=n;j++) chosen[j] = false; chosen[i] = true; queue<int> q; q.push(i); int cnt = 1; while(!q.empty()){ int curr = q.front(); q.pop(); for(int j: children[curr]){ if(chosen[j]) continue; cnt++; chosen[j] = true; q.push(j); adj[curr].push_back(j); } } if(cnt!=n) continue; cost = 0; calcost(i, adj); //cout<<i<<" "<<cost<<"\n"; ans = min(ans, cost); } cout<<ans<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...