제출 #1165118

#제출 시각아이디문제언어결과실행 시간메모리
1165118SmuggingSpun친구 (IOI14_friend)C++20
100 / 100
16 ms2284 KiB
#include<bits/stdc++.h> #include "friend.h" using namespace std; template<class T>void maximize(T& a, T b){ if(a < b){ a = b; } } int findSample(int n, int confidence[], int host[], int protocol[]){ if(n <= 10){ vector<vector<int>>g(n); auto add_edge = [&] (int u, int v){ g[u].emplace_back(v); g[v].emplace_back(u); }; for(int i = 1; i < n; i++){ if(protocol[i] == 1 || protocol[i] == 2){ for(int& j : g[host[i]]){ add_edge(i, j); } } if(protocol[i] == 0 || protocol[i] == 2){ add_edge(host[i], i); } } int ans = 0; for(int mask = 1; mask < (1 << n); mask++){ bool flag = true; for(int i = 0; i < n && flag; i++){ if(1 << i & mask){ for(int& j : g[i]){ if(1 << j & mask){ flag = false; break; } } } } if(flag){ int sum = 0; for(int i = 0; i < n; i++){ if(1 << i & mask){ sum += confidence[i]; } } maximize(ans, sum); } } return ans; } if(*min_element(protocol + 1, protocol + n) == 1 && *max_element(protocol + 1, protocol + n) == 1){ return accumulate(confidence, confidence + n, 0); } if(*max_element(protocol + 1, protocol + n) == 0){ vector<vector<int>>g(n); for(int i = 1; i < n; i++){ g[host[i]].emplace_back(i); } vector<vector<int>>f(n, vector<int>(2, 0)); function<void(int)>dfs; dfs = [&] (int s){ for(int& d : g[s]){ dfs(d); f[s][0] += max(f[d][0], f[d][1]); f[s][1] += f[d][0]; } f[s][1] += confidence[s]; }; dfs(0); return max(f[0][0], f[0][1]); } if(*min_element(protocol + 1, protocol + n) == 2){ return *max_element(confidence, confidence + n); } vector<int>p(n), q(n, 0); for(int i = 0; i < n; i++){ p[i] = confidence[i]; } for(int i = n - 1; i > 0; i--){ if(protocol[i] == 0){ p[host[i]] += q[i]; q[host[i]] += max(p[i], q[i]); } else if(protocol[i] == 1){ p[host[i]] = max(p[host[i]] + max(p[i], q[i]), p[i] + q[host[i]]); q[host[i]] += q[i]; } else{ p[host[i]] = max(p[host[i]] + q[i], p[i] + q[host[i]]); q[host[i]] += q[i]; } } return max(*max_element(p.begin(), p.end()), *max_element(q.begin(), q.end())); }
#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...