Submission #743759

#TimeUsernameProblemLanguageResultExecution timeMemory
743759baneFriend (IOI14_friend)C++17
0 / 100
1 ms212 KiB
#include "friend.h"
#include<bits/stdc++.h>
 
using namespace std;
int findSample(int n, int confidence[], int host[], int protocol[]){
	vector<int>edges[n];
	for (int i = 1; i < n; i++){
		if (protocol[i] == 0){
			//iam your friend
			edges[i].push_back(host[i]);	
		}else{
			edges[i] = edges[host[i]];
		}
	}
	//bipirtite max match is congruent to Min Vertex cover
	//because of konig's theorem
	//max independent set is opposite of min vertex cover
	vector<bool>used1(n, false);
	vector<bool>used(n, false);
	vector<int>to(n, -1);
	int res = n;
	
	function<int(int)>dfs = [&](int u){
		if (used[u])return 0;
		used[u] = 1;
		for (int& x : edges[u]){
			
			if (to[x] == -1 || dfs(to[x])){
				to[x] = u;
				return 1;
			}
		} 
		return 0;
	};
	
	for (int i = 0; i < n; i++){
		if (!used1[i]){
			used.assign(n, false);
			res -= dfs(i);
		}
	}
	return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...