Submission #285806

#TimeUsernameProblemLanguageResultExecution timeMemory
285806Saboon친구 (IOI14_friend)C++14
16 / 100
2 ms1024 KiB
#include "friend.h" #include<bits/stdc++.h> using namespace std; const int maxn = 4050; const int inf = 1e9; int n, pd[maxn], V[maxn], dp[maxn], c[maxn], a[maxn], type[maxn]; vector<int> t[maxn]; int par[maxn]; int dfs(int v){ if (type[v] == 1){ int lc = t[v][0], rc = t[v][1]; dfs(lc); dfs(rc); dp[v] = dp[lc]+pd[rc]; pd[v] = pd[lc]+dp[rc]; dp[v] = max(dp[v],pd[v]); } else{ dp[v] = c[v]; for (auto u : t[v]){ dfs(u); dp[v] += dp[u]; pd[v] += pd[u]; } dp[v] = max(dp[v],pd[v]); } return dp[v]; } void addEdge(int v, int u){ t[v].push_back(u); par[u] = v; } int findSample(int N,int confidence[],int host[],int protocol[]){ n = N; if (*min_element(protocol+1, protocol+n) == 2 and *max_element(protocol+1, protocol+n) == 2) return *max_element(confidence, confidence+n); int newint = n+1; addEdge(0, 1); V[0] = 1; c[1] = confidence[0]; for (int i = 1; i < n; i++){ int v = V[host[i]]; if (protocol[i] == 0){ c[V[host[i]]] = 0; type[v] = 1; addEdge(v, newint++); addEdge(newint-1, newint); V[host[i]] = newint++; addEdge(v, newint++); addEdge(newint-1, newint); V[i] = newint++; c[V[i]] = confidence[i]; c[V[host[i]]] = confidence[host[i]]; } else{ addEdge(par[v], newint++); V[i] = newint-1; c[V[i]] = confidence[i]; } } return dfs(0); }
#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...