Submission #166547

#TimeUsernameProblemLanguageResultExecution timeMemory
166547faremyFriend (IOI14_friend)C++14
100 / 100
56 ms8440 KiB
#include "friend.h" #include <algorithm> #include <vector> struct Edge { Edge(int e, bool d, bool b) : end(e), isDirect(d), isBlocking(b) {} int end; bool isDirect, isBlocking; }; const int MAXN = 1e5; std::vector<Edge> network[MAXN]; int value[MAXN]; int bestSample[MAXN][2][2]; void sample(int node) { int sumBlocking = 0; for (Edge &edge : network[node]) { sample(edge.end); int weight = std::max(std::max(bestSample[edge.end][0][0], bestSample[edge.end][0][1]), std::max(bestSample[edge.end][1][0], bestSample[edge.end][1][1])); if (edge.isBlocking) { bestSample[node][0][0] += bestSample[edge.end][0][0]; bestSample[node][1][0] += bestSample[edge.end][0][0]; if (edge.isDirect) { bestSample[node][1][1] += bestSample[edge.end][0][0]; bestSample[node][0][1] = std::max(bestSample[node][0][1] + bestSample[edge.end][0][0], sumBlocking + weight); sumBlocking += bestSample[edge.end][0][0]; } else { bestSample[node][1][1] += weight; sumBlocking += weight; bestSample[node][0][1] = std::max(bestSample[node][0][1] + bestSample[edge.end][0][0], sumBlocking); } } else { bestSample[node][0][0] += weight; bestSample[node][1][0] += bestSample[edge.end][0][0]; bestSample[node][1][1] += bestSample[edge.end][0][0]; sumBlocking += bestSample[edge.end][0][0]; bestSample[node][0][1] += weight; } } } int findSample(int n, int confidence[], int host[], int protocol[]) { for (int iNode = 0; iNode < n; iNode++) bestSample[iNode][1][0] = bestSample[iNode][1][1] = confidence[iNode]; for (int iEdge = 1; iEdge < n; iEdge++) network[host[iEdge]].emplace_back(iEdge, (protocol[iEdge] % 2 == 0), (protocol[iEdge] > 0)); sample(0); return std::max(std::max(bestSample[0][0][0], bestSample[0][0][1]), std::max(bestSample[0][1][0], bestSample[0][1][1])); }
#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...