Submission #210168

#TimeUsernameProblemLanguageResultExecution timeMemory
210168mohamedsobhi777Friend (IOI14_friend)C++14
0 / 100
8 ms5884 KiB
#include<bits/stdc++.h> #include<friend.h> using namespace std ; const int N = 1e5 + 5 ; vector<int> adj[N] ; vector<int> rep[N] ; int confid[N] ; struct DSU{ vector<int> fat ; void init(int n){ fat.resize(n +1) ; for(int i =0 ; i < n; i++){ fat[i] = i ; } } int fin(int x) { return fat[x] = (fat[x]==x?x:fin(fat[x])) ; } void unio(int a , int b){ int aa = fin(a) ; int bb = fin(b) ; if(aa!=bb){ fat[aa] = bb ; } } }; int dp[N][2] ; int solve(int x, int p , int l){ if(dp[x][l]!=-1) return dp[x][l] ; int ret = 0 ; if(l){ ret+=confid[x] ; } for(auto u : adj[x]) { if(p==u)continue ; if(!l){ ret+=max(solve(u , x , 1) , solve(u , x , 0) ); } else { ret+=solve(u ,x , 0) ; } } return dp[x][l] = ret; } int findSample(int n , int confidence[] , int host[] , int protocol[]){ memset(dp , -1 , sizeof dp) ; DSU d1 ; d1.init(n+1) ; for(int i = 1 ; i < n; i++){ int hst = host[i] ; int hstn = d1.fin(hst) ; int prt = protocol[i] ; if(!prt){ adj[i].push_back(hstn) ; adj[hstn].push_back(i) ; confid[i]+=confidence[i] ; } else if(prt==1){ confid[hstn]+=confidence[i] ; d1.unio(i , hstn) ; } else { confid[i]+=confidence[i] ; rep[hstn].push_back(i) ; } } for(int i = 0 ; i <n ; i++){ for(auto u : rep[i]){ confid[i] = max(confid[i] , confid[u]) ; } } return max(solve(0 , 0 , 0) , solve(0 , 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...