Submission #73596

#TimeUsernameProblemLanguageResultExecution timeMemory
73596MKopchevFriend (IOI14_friend)C++14
35 / 100
5 ms924 KiB
#include<bits/stdc++.h> #include "friend.h" using namespace std; const int nmax=1e3+42; vector<int> adj[nmax]; int conf[nmax]; int dp[nmax][2]; int rec(int node,int par,bool take) { if(dp[node][take]!=-1)return dp[node][take]; int ans=(take?conf[node]:0); if(take) { for(auto k:adj[node]) if(k!=par) ans=ans+rec(k,node,0); } else { for(auto k:adj[node]) if(k!=par) ans=ans+max(rec(k,node,0),rec(k,node,1)); } dp[node][take]=ans; return ans; } int findSample(int n,int confidence[],int host[],int protocol[]) { int sum=confidence[0],maxi=confidence[0]; bool zero=1,one=1,two=1; for(int i=1;i<n;i++) { if(protocol[i]!=0)zero=0; if(protocol[i]!=1)one=0; if(protocol[i]!=2)two=0; sum=sum+confidence[i]; maxi=max(maxi,confidence[i]); } if(one)return sum; if(two)return maxi; if(zero) { for(int i=0;i<n;i++) conf[i]=confidence[i]; for(int i=1;i<n;i++) { adj[host[i]].push_back(i); adj[i].push_back(host[i]); } memset(dp,-1,sizeof(dp)); return max(rec(0,0,0),rec(0,0,1)); } return -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...