Submission #1276166

#TimeUsernameProblemLanguageResultExecution timeMemory
1276166KindaGoodGamesFriend (IOI14_friend)C++17
27 / 100
2 ms584 KiB
#include "friend.h" #include<bits/stdc++.h> using namespace std; struct UnionFind{ vector<int> par; UnionFind(int n){ par.resize(n); iota(par.begin(),par.end(),0); } int find(int i){ if(par[i] == i) return i; return par[i] = find(par[i]); } void unite(int i, int j){ i = find(i); j = find(j); par[j] = i; } }; vector<int> arr,dpT, dpN; vector<vector<int>> adj; void DFS(int v){ dpT[v] = arr[v]; int oth1 = 0; for(auto u : adj[v]){ DFS(u); dpT[v] += dpN[u]; dpN[v] += max(dpT[u],dpN[u]); } } // Find out best sample int findSample(int n,int confidence[],int host[],int protocol[]){ int ans=0; adj.resize(n); arr.resize(n); arr[0] = confidence[0]; UnionFind uf(n); for(int i = 1; i < n; i++){ if(protocol[i] == 0){ adj[host[i]].push_back(i); arr[i] = confidence[i]; }else{ uf.unite(host[i],i); int real =uf.find(i); arr[real] += confidence[i]; } } dpN = dpT = vector<int>(n); DFS(0); for(int i = 0; i < n; i++){ ans = max({ans, dpT[i], dpN[i]}); } return ans; }
#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...