제출 #695138

#제출 시각아이디문제언어결과실행 시간메모리
695138edogawa_somethingBosses (BOI16_bosses)C++17
22 / 100
51 ms94232 KiB
#include<bits/stdc++.h> #include<chrono> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; typedef string st; typedef bool bl; typedef vector<ll> vii; typedef pair<ll,ll> pii; typedef vector<pii> vpi; #define pu push #define ordered_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> #define fast ios_base::sync_with_stdio(0);cin.tie(); #define test ll qqqqq;cin>>qqqqq;while(qqqqq--) #define F first #define S second #define forn(i,n) for(ll i=0;i<n;i++) #define forx(i,j,n) for(ll i=j;i<n;i++) #define pb push_back #define pob pop_back #define all(v) v.begin(),v.end() #define lb lower_bound #define ub upper_bound #define pof pop_front #define pow powww #define prtll(x) printf("%lld",x) #define prtld(x) printf("%Lf",x) #define prtst(x) printf("%s",x) #define prtch(x) printf("%c",x) #define measure chrono::high_resolution_clock::now() const ll dx[]{1,0,-1,0}; const ll dy[]{0,-1,0,1}; const ll inf=2e18; const ll mod=1e9+7; const ll LM=2e7+1; const ll M=2e6+1; const ll MM=1002; const ll MMM=501; const ld pi=acos(-1); //const ll mod=998244353; ll pow(ll r,ll to,ll m=mod){ ll res=1; r%=mod; while(to){ if((to&1)){ res*=r,res%=mod; } r*=r,r%=mod; to=(to>>1); } return res; } ll n,ans; vii k[M]; bl vis[M]; vii v[M]; ll salary[M]; ll dfs(ll r){ ll res=1; for(auto it:v[r]){ res+=dfs(it); } salary[r]=res; return salary[r]; } ll chk(ll r){ forx(i,1,n+1) vis[i]=0; forx(i,1,n+1) v[i].clear(); queue<ll>q; q.push(r); vis[r]=1; while(q.size()){ ll x=q.front(); q.pop(); for(auto it:k[x]){ if(vis[it]) continue; v[x].pb(it),q.push(it),vis[it]=1; } } forx(i,1,n+1){ if(!vis[i]) return inf; } ll res=0; dfs(r); forx(i,1,n+1) res+=salary[i]; return res; } map<ll,ll>mp; int main(){ fast ll ans=inf; cin>>n; forn(i,n){ ll x; cin>>x; while(x--){ ll y; cin>>y; k[y].pb(i+1); mp[y]++; } } ll cnt=0,cur=0; forx(i,1,n+1){ if(mp[i]>cnt) cur=i,cnt=mp[i]; } ans=min(ans,chk(cur)); cout<<ans; return 0; } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...