Submission #243668

#TimeUsernameProblemLanguageResultExecution timeMemory
243668kimbj0709Bosses (BOI16_bosses)C++14
67 / 100
1581 ms1720 KiB
#include <bits/stdc++.h> using namespace std; #define maxn 5050 #define int long long vector<vector<int> > adj(maxn); void dfs(int node,int parent,vector<vector<int> > &ad,vector<int> &dist){ dist[node] = 1; for(auto k:ad[node]){ if(k!=parent){ dfs(k,node,ad,dist); dist[node] += dist[k]; } } } int32_t main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int no_of_input,no_of_input1,input; cin >> no_of_input; for(int i=1;i<=no_of_input;i++){ cin >> no_of_input1; for(int j=0;j<no_of_input1;j++){ cin >> input; //adj[i].push_back(input); adj[input].push_back(i); } } int ans = INT_MAX; for(int i=1;i<=no_of_input;i++){//tree rooted at node i deque<pair<int,int> > q1; deque<int> q2; vector<int> dist(maxn,INT_MAX); vector<int> parent(maxn,0); q1.push_back({i,0}); dist[i] = 0; while(q1.size()!=0){ pair<int,int> a = q1.front(); q1.pop_front(); for(auto k:adj[a.first]){ if(a.second+1<dist[k]){ dist[k] = a.second+1; parent[k] = a.first; q1.push_back({k,dist[k]}); } } } vector<vector<int> > adj2(maxn); vector<int> dist2(maxn,0); for(int j=1;j<=no_of_input;j++){ if(i!=j){ adj2[parent[j]].push_back(j); } } dfs(i,-1,adj2,dist2); int sum = 0; for(int j=1;j<=no_of_input;j++){ if(dist2[j]==0&&i!=j){ sum = INT_MAX; } sum += dist2[j]; } ans = min(ans,sum); } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...