Submission #213283

#TimeUsernameProblemLanguageResultExecution timeMemory
213283tleontest1Bosses (BOI16_bosses)C++14
100 / 100
785 ms1152 KiB
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
 
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long lo;
typedef pair< int,int > PII;
 
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define FOR for(int i=1;i<=n;i++)
#define mid ((start+end)/2)
#define ort ((bas+son)/2)
 
const lo MAX = -1000000000000000000;
const lo MIN = 1000000000000000000;
const lo inf = 1000000000;
const lo KOK = 100000;
const lo LOG = 30;
const lo li = 5002;
const lo mod = 1000000007;
 
int n,m,b[li],a[li],k,flag,t,sub[li],mn=inf,vis[li];
int cev;
string s;
vector<int> v[li],vv[li];
vector<PII> ok;
 
inline void bfs(int ind){
	queue<int> q;
	while(q.size())q.pop();
	q.push(ind);
	while(q.size()){
		int node=q.front();
		q.pop();
		//~ if(vis[node])continue;
		vis[node]=1;
		for(int i=0;i<(int)v[node].size();i++){
			if(vis[v[node][i]])continue;
			vis[v[node][i]]=1;
			q.push(v[node][i]);
			//~ cout<<node<<" ; ; "<<v[node][i]<<endl;
			vv[node].pb(v[node][i]);
		}
	}
}
 
inline void dfs(int node,int ata,int yaz){
	sub[node]=1;
	for(int i=0;i<(int)vv[node].size();i++){
		int go=vv[node][i];
		if(go==ata)continue;
		//~ cout<<node<<" : ; "<<go<<" : ;"<<yaz<<endl;
		dfs(go,node,yaz);
		sub[node]+=sub[go];
	}
}
 
int main(void){
	scanf("%d",&n);
	FOR{
		scanf("%d",&k);
		for(int j=1;j<=k;j++){
			int x;
			scanf("%d",&x);
			v[x].pb(i);
		}
	}
	FOR{
		ok.pb(mp(v[i].size(),i));
	}
	sort(ok.begin(),ok.end());
	reverse(ok.begin(),ok.end());
	int kok=sqrt(ok.size()-1);
	kok=kok*35;
	kok=min(kok,(int)ok.size());
	for(int jj=0;jj<kok;jj++){
		int i=ok[jj].se;
		//~ memset(sub,-1,sizeof(sub));
		for(int j=1;j<=n;j++){
			vv[j].clear();
			vis[j]=0;
		}
		bfs(i);
		dfs(i,0,i);
		flag=0;
		cev=0;
		for(int j=1;j<=n;j++){
			if(vis[j]==0){flag=1;break;}
			cev+=sub[j];
			//~ if(i==1)cout<<sub[j]<<" ";
		}
		//~ cout<<cev<<endl;
		if(!flag)mn=min(mn,cev);
	}
	//~ sort(ok.begin(),ok.end());
	//~ kok=min(kok,ok.size());
	//~ for(int jj=0;jj<kok;jj++){
		//~ int i=ok[jj].se;
		//memset(sub,-1,sizeof(sub));
		//~ for(int j=1;j<=n;j++){
			//~ vv[j].clear();
			//~ vis[j]=0;
		//~ }
		//~ bfs(i);
		//~ dfs(i,0,i);
		//~ flag=0;
		//~ cev=0;
		//~ for(int j=1;j<=n;j++){
			//~ if(vis[j]==0){flag=1;break;}
			//~ cev+=sub[j];
			////~ if(i==1)cout<<sub[j]<<" ";
		//~ }
		//cout<<cev<<endl;
		//~ if(!flag)mn=min(mn,cev);
	//~ }
	printf("%d\n",mn);
	return 0;
}

Compilation message (stderr)

bosses.cpp: In function 'int main()':
bosses.cpp:65:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
bosses.cpp:67:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&k);
   ~~~~~^~~~~~~~~
bosses.cpp:70:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    scanf("%d",&x);
    ~~~~~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...