Submission #91973

#TimeUsernameProblemLanguageResultExecution timeMemory
91973KamisamaBosses (BOI16_bosses)C++14
67 / 100
1574 ms764 KiB
#include <iostream> #include <cstdio> #include <vector> using namespace std; const int maxn=5e3+7; int n,h[maxn],res; vector<int> adj[maxn]; struct Queue{ unsigned sz; struct Node{ int val; Node *link; }*head,*tail; Queue():sz{0},head{nullptr},tail{nullptr}{}; inline bool Empty(){return head==nullptr;} inline void Push(const int &val){ Node *newTail=new Node; newTail->val=val; newTail->link=nullptr; if(tail) tail->link=newTail; tail=newTail; if(!head) head=tail; sz++; } inline int Pop(){ if(Empty()) return -1; Node *ptr=head; head=ptr->link; if(!head) tail=nullptr; int val=ptr->val; delete ptr; sz--; return val; } }; inline void Bfs(const int &root){ Queue q; fill(h,h+n+1,0); h[root]=1; int sum=1,nEdges=0; q.Push(root); while(!q.Empty()){ int u=q.Pop(); for(int v: adj[u]){ if(h[v]) continue; nEdges++; h[v]=h[u]+1; sum+=h[v]; q.Push(v); } } if(nEdges==n-1) res=min(res,sum); } inline void Read(int &x){ register char c; for(c=getchar();c>'9'||c<'0';c=getchar()); for(x=0;'0'<=c&&c<='9';c=getchar()) x=10*x+c-'0'; } inline void Write(const int &x){ if(x>9) Write(x/10); putchar(x%10+'0'); } int main(){ Read(n); for(int i=1,k=0;i<=n;i++){ Read(k); for(int j=1,x=0;j<=k;j++) cin>>x, adj[x].push_back(i); } res=(int)1e9+7; for(int i=1;i<=n;i++) Bfs(i); Write(res); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...