#include "friend.h"
#include<iostream>
#include<vector>
using namespace std;
#define forn(i, n) for(int i=0; i<(int)n; ++i)
#define forsn(i, s, n) for(int i=s; i<(int)n; ++i)
#define PB push_back
const int MAXN=100010;
int n, dp[2][MAXN], conf[MAXN], mt[MAXN], mini[11][11];
bool used[MAXN], even[MAXN];
vector<int> g[MAXN];
vector<int> base;
void dfs(int v, int p){
dp[1][v]=conf[v];
for(int to:g[v]) if(to!=p) {
dfs(to, v);
dp[1][v]+=dp[0][to];
dp[0][v]+=dp[1][to];
}
dp[1][v]=max(dp[0][v], dp[1][v]);
}
int solve0(int confidence[], int host[]){
forsn(i, 1, n) g[i].PB(host[i]), g[host[i]].PB(i);
dfs(0, 0);
return dp[1][0];
}
int solve1(int confidence[], int host[]){
int sum=0;
forn(i, n) sum+=confidence[i];
return sum;
}
int solve2(int confidence[], int host[]){
int mx=-1;
forn(i, n) mx=max(mx, confidence[i]);
return mx;
}
bool kuhn(int v){
if(used[v]) return false;
used[v]=true;
for(int to:g[v]) if(mt[to]==-1 || kuhn(mt[to])){
mt[to]=v;
return true;
}
return false;
}
int solve3(int protocol[], int confidence[], int host[]){
forsn(i, 1, n){
if(protocol[i]==0){
even[i]=!even[host[i]];
g[host[i]].PB(i);
g[i].PB(host[i]);
}
else{
even[i]=even[host[i]];
for(int to:g[host[i]]) g[i].PB(to), g[to].PB(i);
}
}
forn(i, n) if(even[i]) base.PB(i);
forn(i, n) mt[i]=-1;
int ret=0;
for(auto v:base){
for(auto i:base) used[i]=false;
ret+=kuhn(v);
}
return n-ret;
}
int solveTask(int task, int confidence[], int host[]){
if(task==0) return solve0(confidence, host);
else if(task==1) return solve1(confidence, host);
else if(task==2) return solve2(confidence, host);
}
int miniSolve(int confidence[], int host[], int protocol[]){
forsn(i, 1, n){
if(protocol[i]==0) mini[i][host[i]]=mini[host[i]][i]=true;
else{
forn(j, n) if(mini[host[i]][j]) mini[i][j]=mini[j][i]=true;
if(protocol[i]==2) mini[i][host[i]]=mini[host[i]][i]=true;
}
}
int ret=-1;
forn(mask, 1<<n){
int sum=0;
vector<int> cur;
forn(i, n) if(mask&(1<<i)) cur.PB(i);
bool wii=false;
for(int u:cur) for(int v:cur) wii|=mini[u][v];
if(wii) continue;
for(int v:cur) sum+=confidence[v];
ret=max(ret, sum);
}
return ret;
}
// Find out best sample
int findSample(int N, int confidence[], int host[], int protocol[]){
n=N;
if(n<=10) return miniSolve(confidence, host, protocol);
forn(i, n) conf[i]=confidence[i];
bool eq=true;
forsn(i, 1, n-1) eq&=protocol[i]==protocol[i+1];
if(eq) return solveTask(protocol[1], confidence, host);
return solve3(protocol, confidence, host);
return 0;
}
Compilation message
friend.cpp: In function 'int solveTask(int, int*, int*)':
friend.cpp:80:1: warning: control reaches end of non-void function [-Wreturn-type]
80 | }
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
2644 KB |
Output is correct |
2 |
Correct |
1 ms |
2644 KB |
Output is correct |
3 |
Correct |
2 ms |
2644 KB |
Output is correct |
4 |
Correct |
1 ms |
2644 KB |
Output is correct |
5 |
Correct |
1 ms |
2644 KB |
Output is correct |
6 |
Correct |
2 ms |
2644 KB |
Output is correct |
7 |
Correct |
1 ms |
2644 KB |
Output is correct |
8 |
Correct |
2 ms |
2644 KB |
Output is correct |
9 |
Correct |
2 ms |
2644 KB |
Output is correct |
10 |
Correct |
2 ms |
2644 KB |
Output is correct |
11 |
Correct |
1 ms |
2660 KB |
Output is correct |
12 |
Correct |
2 ms |
2644 KB |
Output is correct |
13 |
Correct |
2 ms |
2656 KB |
Output is correct |
14 |
Correct |
2 ms |
2644 KB |
Output is correct |
15 |
Correct |
2 ms |
2644 KB |
Output is correct |
16 |
Correct |
2 ms |
2668 KB |
Output is correct |
17 |
Correct |
2 ms |
2644 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
2644 KB |
Output is correct |
2 |
Correct |
1 ms |
2644 KB |
Output is correct |
3 |
Correct |
2 ms |
2644 KB |
Output is correct |
4 |
Correct |
2 ms |
2644 KB |
Output is correct |
5 |
Correct |
1 ms |
2644 KB |
Output is correct |
6 |
Correct |
2 ms |
2644 KB |
Output is correct |
7 |
Correct |
1 ms |
2644 KB |
Output is correct |
8 |
Correct |
2 ms |
2644 KB |
Output is correct |
9 |
Correct |
1 ms |
2644 KB |
Output is correct |
10 |
Correct |
2 ms |
2644 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
2644 KB |
Output is correct |
2 |
Correct |
2 ms |
2644 KB |
Output is correct |
3 |
Correct |
2 ms |
2644 KB |
Output is correct |
4 |
Correct |
1 ms |
2644 KB |
Output is correct |
5 |
Correct |
2 ms |
2644 KB |
Output is correct |
6 |
Correct |
1 ms |
2644 KB |
Output is correct |
7 |
Correct |
2 ms |
2644 KB |
Output is correct |
8 |
Correct |
2 ms |
2644 KB |
Output is correct |
9 |
Correct |
2 ms |
2644 KB |
Output is correct |
10 |
Correct |
2 ms |
2644 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
2644 KB |
Output is correct |
2 |
Correct |
2 ms |
2644 KB |
Output is correct |
3 |
Correct |
2 ms |
2644 KB |
Output is correct |
4 |
Correct |
2 ms |
2644 KB |
Output is correct |
5 |
Correct |
2 ms |
2772 KB |
Output is correct |
6 |
Correct |
2 ms |
2644 KB |
Output is correct |
7 |
Correct |
1 ms |
2644 KB |
Output is correct |
8 |
Correct |
2 ms |
2644 KB |
Output is correct |
9 |
Correct |
1 ms |
2644 KB |
Output is correct |
10 |
Correct |
2 ms |
2644 KB |
Output is correct |
11 |
Correct |
2 ms |
2644 KB |
Output is correct |
12 |
Correct |
2 ms |
2644 KB |
Output is correct |
13 |
Correct |
3 ms |
2644 KB |
Output is correct |
14 |
Correct |
1 ms |
2644 KB |
Output is correct |
15 |
Correct |
2 ms |
2644 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
2644 KB |
Output is correct |
2 |
Correct |
1 ms |
2644 KB |
Output is correct |
3 |
Correct |
3 ms |
2600 KB |
Output is correct |
4 |
Correct |
2 ms |
2644 KB |
Output is correct |
5 |
Correct |
1 ms |
2644 KB |
Output is correct |
6 |
Correct |
1 ms |
2644 KB |
Output is correct |
7 |
Correct |
2 ms |
2644 KB |
Output is correct |
8 |
Correct |
2 ms |
2644 KB |
Output is correct |
9 |
Correct |
2 ms |
2772 KB |
Output is correct |
10 |
Correct |
2 ms |
2644 KB |
Output is correct |
11 |
Correct |
2 ms |
2644 KB |
Output is correct |
12 |
Correct |
2 ms |
2644 KB |
Output is correct |
13 |
Correct |
2 ms |
2644 KB |
Output is correct |
14 |
Correct |
2 ms |
2656 KB |
Output is correct |
15 |
Correct |
2 ms |
2644 KB |
Output is correct |
16 |
Correct |
2 ms |
2644 KB |
Output is correct |
17 |
Correct |
2 ms |
2644 KB |
Output is correct |
18 |
Correct |
1 ms |
2644 KB |
Output is correct |
19 |
Correct |
2 ms |
2644 KB |
Output is correct |
20 |
Correct |
2 ms |
2644 KB |
Output is correct |
21 |
Correct |
2 ms |
2644 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
2644 KB |
Output is correct |
2 |
Correct |
2 ms |
2644 KB |
Output is correct |
3 |
Correct |
2 ms |
2644 KB |
Output is correct |
4 |
Correct |
3 ms |
2644 KB |
Output is correct |
5 |
Correct |
2 ms |
2644 KB |
Output is correct |
6 |
Correct |
2 ms |
2644 KB |
Output is correct |
7 |
Correct |
2 ms |
2644 KB |
Output is correct |
8 |
Correct |
2 ms |
2644 KB |
Output is correct |
9 |
Correct |
2 ms |
2644 KB |
Output is correct |
10 |
Correct |
2 ms |
2644 KB |
Output is correct |
11 |
Correct |
2 ms |
2644 KB |
Output is correct |
12 |
Execution timed out |
1071 ms |
49952 KB |
Time limit exceeded |
13 |
Halted |
0 ms |
0 KB |
- |