This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <friend.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
#define FOR(a,b) for(int a=0;a<b;a++)
#define F0R(a,b,c) for(int a = b; a<=c; a++)
#define f first
#define s second
#define m0(x) memset(x,0,sizeof(x))
typedef pair<int,int> pi;
typedef long long ll;
typedef vector<int> vi;
typedef vector<pi> vpi;
int findSample(int n, int conf[], int host[], int pr[]){
assert(n <= 20);
vi edges[n];
F0R(i,1,n-1){
int h = host[i];
if(pr[i] == 0){
edges[h].push_back(i);
edges[i].push_back(h);
}else{
for(auto &a: edges[h]){
edges[i].push_back(a);
edges[a].push_back(i);
}
if(pr[i] == 2){
edges[i].push_back(h);
edges[h].push_back(i);
}
}
}
int best = 0;
FOR(mask,(1<<n)){
int cur = 0;
bool good = 1;
vector<bool> found(n);
FOR(i,n){
if((1<<i)&mask){
cur += conf[i];
found[i] = 1;
}
}
if(cur <= best) continue;
FOR(i,n){
if(!found[i]) continue;
for(auto &a: edges[i]){
assert(a != i);
if(found[a]){
good = 0;
break;
}
}
if(!good) break;
}
if(good) best = cur;
}
assert(best != 0);
return best;
}
//void grader(){
// int n; cin >> n;
// int conf[n],host[n],pr[n];
// FOR(i,n) cin >> conf[i];
// F0R(i,1,n-1) cin >> host[i] >> pr[i];
// cout << "Answer: " << findSample(n,conf,host,pr);
//}
//
//int main()
//{
// ios_base::sync_with_stdio(0); cin.tie(0);
// grader();
// return 0;
//}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |