제출 #137492

#제출 시각아이디문제언어결과실행 시간메모리
137492vinceFriend (IOI14_friend)C++14
35 / 100
5 ms2808 KiB
#include <stdio.h> #include <math.h> #include <string.h> #include <limits.h> #include <stdlib.h> #include <algorithm> #include <iostream> #include <utility> #include <vector> #include <string> #include <unordered_map> #include <map> #include <queue> #include <set> #include <stack> using namespace std; #define fi first #define se second typedef pair<int,int> ii; int n; int A[100003], T[100003], H[100003]; bool task2 = 1, task3 = 1, task4 = 1; int dp[100003][2]; vector<int> chi[100003]; void dfs_tree(int u) { int sum0 = 0, sum1 = 0; for(int v : chi[u]) { dfs_tree(v); sum0 += dp[v][0]; sum1 += max(dp[v][0],dp[v][1]); } dp[u][0] = sum1; dp[u][1] = sum0+A[u]; } int solve_tree() { for(int i = 1; i < n; i++) chi[H[i]].push_back(i); dfs_tree(0); return max(dp[0][1], dp[0][0]); } int solve(int task) { int sum = 0; int mx = 0; for(int i = 0; i < n; i++) { sum += A[i]; mx = max(mx, A[i]); } if(task == 2) return sum; if(task == 3) return mx; if(task == 4) return solve_tree(); return -1; } // Find out best sample int findSample(int N,int confidence[],int host[],int protocol[]) { n = N; for(int i = 0; i < n; i++) A[i] = confidence[i]; for(int i = 1; i < n; i++) { T[i] = protocol[i], H[i] = host[i]; if(T[i] != 1) task2 = 0; if(T[i] != 2) task3 = 0; if(T[i] != 0) task4 = 0; // printf("%d\n", T[i]); } if(task2) return solve(2); if(task3) return solve(3); if(task4) return solve(4); 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...