Submission #122112

#TimeUsernameProblemLanguageResultExecution timeMemory
122112brcodeFriend (IOI14_friend)C++14
35 / 100
3 ms512 KiB
#include <iostream> #include <vector> #include <set> #include "friend.h" using namespace std; const int MAXN = 1e3+5; bool visited[MAXN]; bool visited2[MAXN]; int val[MAXN]; vector<int> v1[MAXN]; int first; set<int> s1; int dp[MAXN][6]; void dfs(int curr,int par){ visited[curr] = true; for(int x:v1[curr]){ if(x!=par && !visited[x]){ dfs(x,curr); }else if(x!=par && visited[x]){ first = x; } } } void dfs2(int curr){ dp[curr][1] = val[curr]; visited2[curr] = true; if(s1.find(curr)==s1.end()){ dp[curr][3] = val[curr]; } for(int x:v1[curr]){ if(!visited2[x] && x!=first){ dfs2(x); dp[curr][1]+=dp[x][0]; dp[curr][0]+=max(dp[x][0],dp[x][1]); dp[curr][3]+=dp[x][4]; dp[curr][4]+=max(dp[x][3],dp[x][4]); } } } int findSample(int n, int confidence[], int host[], int protocol[]){ bool one = true; bool two = true; bool three = true; for(int i=1;i<n;i++){ if(protocol[i]!=0){ one = false; } if(protocol[i]!=1){ two = false; } if(protocol[i]!=2){ three = false; } } if(two){ int ans = 0; for(int i=0;i<n;i++){ ans+=confidence[i]; } return ans; } if(three){ int ans = 0; for(int i=0;i<n;i++){ ans = max(ans,confidence[i]); } return ans; } if(one){ int ans = 0; for(int i=1;i<n;i++){ v1[host[i]].push_back(i); v1[i].push_back(host[i]); } for(int i=0;i<n;i++){ val[i] = confidence[i]; } for(long long i=0;i<n;i++){ if(!visited[i]){ first = i; dfs(i,i); long long temp1 = 0; long long temp2 = val[first]; for(int x:v1[first]){ s1.insert(x); } for(long long x:v1[first]){ if(!visited2[x]){ dfs2(x); temp1+=max(dp[x][0],dp[x][1]); temp2+=dp[x][4]; //cout<<temp2<<endl; } } ans+=max(temp1,temp2); } } return ans; } if(n<=10){ for(int i=1;i<n;i++){ v1[host[i]].push_back(i); v1[i].push_back(host[i]); } int ans = 0; for(int i=0;i<(1<<n);i++){ bool ok = true; int tempans = 0; for(int j=0;j<n;j++){ if(i & (1<<j)){ for(int x:v1[j]){ if(i & (1<<x)){ ok = false; break; } } tempans+=confidence[j]; } } if(ok){ ans = max(ans,tempans); } } return ans; } return 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...