Submission #1268109

#TimeUsernameProblemLanguageResultExecution timeMemory
1268109herominhsteveFriend (IOI14_friend)C++20
100 / 100
17 ms3516 KiB
#include <bits/stdc++.h> #include "friend.h" #define allof(x) x.begin(),x.end() #define mset(x,n) memset(x,(n),sizeof(x)) using namespace std; template<class X,class Y> bool minimize(X &a,Y b){ if (a>b) {a=b; return true;} return false;} template<class X,class Y> bool maximize(X &a,Y b){ if (a<b) {a=b; return true;} return false;} struct Query{ int u,v,type; Query(): u(0),v(0),type(0) {} Query(int U,int V,int T): u(U), v(V), type(T) {} }; int findSample(int n, int confidence[], int host[], int protocol[]){ vector<Query> queries; for (int i=1;i<n;i++) queries.emplace_back(host[i],i,protocol[i]); reverse(allof(queries)); int dp[n+1][2]; mset(dp,0); for (int i=0;i<n;i++) dp[i][1] = confidence[i]; for (Query qr : queries){ int type = qr.type; int u = qr.u; int v = qr.v; if (!type){ dp[u][1] += dp[v][0]; dp[u][0] += max(dp[v][1],dp[v][0]); } else if (type==1){ dp[u][1] = max({dp[u][1] + dp[v][0],dp[u][0] + dp[v][1],dp[u][1] + dp[v][1]}); dp[u][0] += dp[v][0]; } else{ dp[u][1] = max(dp[u][1] + dp[v][0],dp[u][0] + dp[v][1]); dp[u][0] += dp[v][0]; } } return max(dp[0][0],dp[0][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...