답안 #285620

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
285620 2020-08-29T10:33:17 Z emanIaicepsa 친구 (IOI14_friend) C++14
69 / 100
42 ms 5880 KB
#include "friend.h"
#include<bits/stdc++.h>
#define pb emplace_back
#define vi vector<int>
using namespace std;
// Find out best sample
/*
6
13 3 6 20 10 15
0 0
0 1
1 2
2 1
0 0
*/
bool f[1005][1005];
vi E[1005];
int dp[1005][5], side[1005];

void addedge(int x,int h, int ope){
	if(ope == 0) side[x] = side[h]^1, f[x][h] = f[h][x] = 1, E[h].pb(x), E[x].pb(h);
	else if(ope == 1){
		side[x] = side[h];
		for(int i=0;i<x;i++){
			if(f[h][i]) f[x][i] = f[i][x] = 1, E[x].pb(i), E[i].pb(x);
		}
	}
	else{
		for(int i=0;i<x;i++){
			if(i == h || f[h][i]) f[i][x] = f[x][i] = 1, E[i].pb(x), E[x].pb(i);
		}
	}
}

bool ok(vi &v){
	/* for(auto i:v) cout<<i<<" "; cout<<'\n'; */
	int n = v.size();
	for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) if(f[v[i]][v[j]]) return 0;
	return 1;
}

int val[1005];
void dfs(int x,int p){
	for(auto &i:E[x]){
		if(i==p) continue;
		dfs(i, x);
	}
	dp[x][0] = 0;
	dp[x][1] = val[x];
	for(auto &i:E[x]){
		if(i==p) continue;
		dp[x][1] += dp[i][0];
		dp[x][0] += max(dp[i][0], dp[i][1]);
	}
}

bool vis[1005];
int match[1005];
bool dfs_match(int x){
	vis[x] = 1;
	for(auto &i:E[x]){
		if(match[i] == -1){
			match[i] = x;
			match[x] = i;
			return 1;
		}
		else if(!vis[match[i]] && dfs_match(match[i])){
			match[i] = x;
			match[x] = i;
			return 1;
		}
	}
	return 0;
}

int findSample(int n,int conf[],int host[],int ope[]){
	for(int i=1;i<n;i++) addedge(i, host[i], ope[i]);
	for(int i=0;i<n;i++) val[i] = conf[i];
	
	if(n <= 10){
		int all = 1<<n, ans = 0;
		for(int i=1;i<all;i++){
			vector<int> v;
			for(int j=0;j<n;j++){
				if(i>>j&1) v.pb(j);
			}
			if(ok(v)){
				int ta = 0;
				for(auto &x:v) ta += conf[x];
				ans = max(ans, ta);
			}
		}
		return ans;
	}
	
	else if(*max_element(conf, conf+n) == 1){
		memset(match, -1, sizeof(match));
		int ans = 0;
		/* for(int i=0;i<n;i++) cout<<side[i]<<" \n"[i==n-1]; */
		for(int i=0;i<n;i++){
			if(!side[i]){
				memset(vis, 0, sizeof(vis));
				ans += dfs_match(i);
			}
		}
		return n - ans;
	}

	else if(ope[1] == 2){
		return *max_element(conf, conf+n);
	}

	else if(ope[1] == 0){
		int ans = 0;
		for(int i=0;i<n;i++){
			if(!dp[i][1]){
				dfs(i, -1);
				ans += max(dp[i][0], dp[i][1]);
			}
		}
		return ans;
	}
}

Compilation message

friend.cpp: In function 'int findSample(int, int*, int*, int*)':
friend.cpp:123:1: warning: control reaches end of non-void function [-Wreturn-type]
  123 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 0 ms 384 KB Output is correct
7 Correct 1 ms 384 KB Output is correct
8 Correct 0 ms 384 KB Output is correct
9 Correct 0 ms 384 KB Output is correct
10 Correct 0 ms 384 KB Output is correct
11 Correct 0 ms 384 KB Output is correct
12 Correct 1 ms 384 KB Output is correct
13 Correct 1 ms 384 KB Output is correct
14 Correct 0 ms 384 KB Output is correct
15 Correct 0 ms 384 KB Output is correct
16 Correct 1 ms 384 KB Output is correct
17 Correct 1 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 3 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1664 KB Output is correct
2 Correct 12 ms 5120 KB Output is correct
3 Correct 1 ms 512 KB Output is correct
4 Correct 7 ms 3712 KB Output is correct
5 Correct 14 ms 5120 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 2 ms 1152 KB Output is correct
8 Correct 3 ms 1536 KB Output is correct
9 Correct 1 ms 512 KB Output is correct
10 Correct 16 ms 5376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 3 ms 1440 KB Output is correct
6 Correct 1 ms 1408 KB Output is correct
7 Correct 1 ms 512 KB Output is correct
8 Correct 1 ms 1408 KB Output is correct
9 Correct 0 ms 384 KB Output is correct
10 Correct 1 ms 768 KB Output is correct
11 Correct 1 ms 768 KB Output is correct
12 Correct 1 ms 1280 KB Output is correct
13 Correct 1 ms 1280 KB Output is correct
14 Correct 1 ms 512 KB Output is correct
15 Correct 1 ms 1280 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 0 ms 384 KB Output is correct
6 Correct 0 ms 384 KB Output is correct
7 Correct 0 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 4 ms 1408 KB Output is correct
10 Correct 3 ms 384 KB Output is correct
11 Correct 1 ms 768 KB Output is correct
12 Correct 1 ms 896 KB Output is correct
13 Correct 1 ms 768 KB Output is correct
14 Correct 2 ms 1408 KB Output is correct
15 Correct 1 ms 768 KB Output is correct
16 Correct 1 ms 896 KB Output is correct
17 Correct 0 ms 384 KB Output is correct
18 Correct 1 ms 640 KB Output is correct
19 Correct 1 ms 384 KB Output is correct
20 Correct 2 ms 1152 KB Output is correct
21 Correct 3 ms 1408 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 0 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 1 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 0 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 0 ms 384 KB Output is correct
12 Runtime error 42 ms 5880 KB Execution killed with signal 11
13 Halted 0 ms 0 KB -