제출 #1052586

#제출 시각아이디문제언어결과실행 시간메모리
1052586MalixBosses (BOI16_bosses)C++14
100 / 100
702 ms1104 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> tii; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define MP make_pair #define LSOne(s) ((s)&(-s)) ll INF=1e18+10; int inf=1e9+10; ll M=1e9+7; int main() { // ios::sync_with_stdio(0); // cin.tie(0); int n;cin>>n; vii a(n); REP(i,0,n){ int x;cin>>x; while(x--){ int y;cin>>y; y--; a[y].PB(i); } } int ans=inf; REP(i,0,n){ vi vis(n,0); queue<int> pq; vi p(n,-1); p[i]=-2;vis[i]=1; pq.push(i);vi c(n,0); queue<pi> b; while(!pq.empty()){ int x=pq.front(); pq.pop(); int k=0; for(auto u:a[x]){ if(p[u]==-1&&vis[u]==0){ vis[u]=1; k++; c[x]++; pq.push(u); p[u]=x; } } if(k==0)b.push({x,1}); } bool flag=1;int count=0; REP(i,0,n)if(vis[i]==0)flag=0; if(flag==0)continue; vi val(n,0); while(!b.empty()){ int x=b.front().F; int y=b.front().S; b.pop();count+=y; if(p[x]<0)continue; c[p[x]]--;val[p[x]]+=y; if(c[p[x]]==0)b.push({p[x],val[p[x]]+1}); } ans=min(ans,count); } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...