제출 #242418

#제출 시각아이디문제언어결과실행 시간메모리
242418joseacaz친구 (IOI14_friend)C++17
46 / 100
41 ms2040 KiB
#include "friend.h" #include <bits/stdc++.h> #define pb push_back using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<ll> vl; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 1005; int prot[3], on[MAXN], DP[MAXN][2], visDP[MAXN][2]; int ans, c[MAXN], vis[MAXN]; vi Graph[MAXN]; int solve(int node, int f, int p = 0) { if(visDP[node][f]) return DP[node][f]; int res1 = 0, res2 = 0; for(auto i : Graph[node]) { if(i == p) continue; res1 += solve(i, 1, node); res2 += solve(i, 0, node); } visDP[node][f] = 1; if(f) return DP[node][f] = max(res1, res2 + c[node]); else return DP[node][f] = res1; } // Find out best sample int findSample(int N, int _conf[], int host[], int protocol[]) { if(N > 1000) return 0; for(int i = 0; i < N; i++) { c[i] = _conf[i]; if(i >= 1) prot[protocol[i]]++; } //S1 if(N <= 10) { for(int i = 1; i < N; i++) { if(protocol[i] == 0) { Graph[host[i]].pb(i); Graph[i].pb(host[i]); } else if(protocol[i] == 1) { for(auto v : Graph[host[i]]) { Graph[v].pb(i); Graph[i].pb(v); } } else if(protocol[i] == 2) { for(auto v : Graph[host[i]]) { Graph[v].pb(i); Graph[i].pb(v); } Graph[host[i]].pb(i); Graph[i].pb(host[i]); } } int aux; for(int i = 0; i < (1 << N); i++) { aux = 0; for(int j = 0; j < N; j++) { on[j] = 0; if(i & (1 << j)) { on[j] = 1; aux += c[j]; } } bool ind = 1; for(int node = 0; node < N; node++) if(on[node]) for(auto j : Graph[node]) if(on[j]) ind = 0; if(!ind) continue; ans = max(ans, aux); } } //S2 else if(prot[1] == N - 1) { for(int i = 0; i < N; i++) ans += c[i]; } //S3 else if(prot[2] == N - 1) { for(int i = 0; i < N; i++) ans = max(ans, c[i]); } //S4 else if(prot[0] == N - 1) { for(int i = 1; i < N; i++) { if(protocol[i] == 0) { Graph[host[i]].pb(i); Graph[i].pb(host[i]); } } ans = solve(0, 1); } //S5 else if(prot[0] + prot[1] == N - 1) { for(int i = 1; i < N; i++) { if(protocol[i] == 0) { Graph[host[i]].pb(i); Graph[i].pb(host[i]); } else if(protocol[i] == 1) { for(auto v : Graph[host[i]]) { Graph[v].pb(i); Graph[i].pb(v); } } } queue<pii> Q; Q.push({0, 0}); pii aux; int nodes[2] = {0, 0}; while(!Q.empty()) { aux = Q.front(); Q.pop(); nodes[aux.second]++; for(auto i : Graph[aux.first]) { if(!vis[i]) { Q.push({i, aux.second^1}); vis[i] = 1; } } } ans = max(nodes[0], nodes[1]); } return ans; }
#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...