제출 #1027177

#제출 시각아이디문제언어결과실행 시간메모리
1027177huutuan친구 (IOI14_friend)C++14
100 / 100
25 ms8196 KiB
#include "friend.h" #include <bits/stdc++.h> using namespace std; const int N=1e5+10, inf=1e9; int a[N], f[N][2]; vector<pair<int, int>> g[N]; void dfs(int u){ int ff[2][2]{{0, -inf}, {-inf, -inf}}, gg[2][2]{{-inf, -inf}, {-inf, -inf}}; for (auto &e:g[u]){ int v=e.first, w=e.second; dfs(v); for (int i=0; i<2; ++i) for (int j=0; j<2; ++j){ gg[i][j]=max(gg[i][j], ff[i][j]+f[v][0]); if (w==0) gg[1][j]=max(gg[1][j], ff[i][j]+f[v][1]); if (w==1 && i==0) gg[i][1]=max(gg[i][1], ff[i][j]+f[v][1]); if (w==2 && i==0) gg[1][1]=max(gg[1][1], ff[i][j]+f[v][1]); } for (int i=0; i<2; ++i) for (int j=0; j<2; ++j) ff[i][j]=gg[i][j], gg[i][j]=-inf; } f[u][0]=max(ff[0][0], ff[1][0]); f[u][1]=max(ff[0][1], ff[1][1]); f[u][1]=max(f[u][1], max(ff[0][0], ff[0][1])+a[u]); } // Find out best sample int findSample(int n,int confidence[],int host[],int protocol[]){ for (int i=0; i<n; ++i) a[i]=confidence[i]; for (int i=1; i<n; ++i){ g[host[i]].emplace_back(i, protocol[i]); } dfs(0); return max(f[0][0], f[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...