/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 5ms 7.5 MiB
#2 Accepted 6ms 7.25 MiB
#3 Wrong Answer 5ms 7.414 MiB
#4 Wrong Answer 8ms 7.465 MiB
#5 Wrong Answer 49ms 8.27 MiB
#6 Wrong Answer 87ms 8.418 MiB
#7 Wrong Answer 67ms 8.332 MiB
#8 Wrong Answer 40ms 7.52 MiB
#9 Wrong Answer 89ms 7.527 MiB
#10 Wrong Answer 113ms 8.391 MiB
#11 Wrong Answer 78ms 8.438 MiB
#12 Wrong Answer 89ms 8.344 MiB
#13 Wrong Answer 37ms 8.52 MiB
#14 Wrong Answer 135ms 8.414 MiB
#15 Wrong Answer 59ms 7.629 MiB
#16 Wrong Answer 32ms 8.176 MiB
#17 Wrong Answer 32ms 8.324 MiB
#18 Wrong Answer 31ms 8.27 MiB
#19 Accepted 135ms 14.262 MiB
#20 Accepted 135ms 14.258 MiB
#21 Accepted 134ms 14.254 MiB
#22 Accepted 183ms 25.52 MiB
#23 Wrong Answer 221ms 13.688 MiB
#24 Wrong Answer 215ms 13.703 MiB
#25 Accepted 167ms 13.48 MiB
#26 Accepted 14ms 7.953 MiB

Code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
 
const int N = 2e5 + 7;
int root;

vector<int> a(N), dis1(N), dis2(N), g[N];

void dfs(int u, int p){
  for (auto v : g[u]){
    if (v == p) continue;
    dfs(v, u);
    if (!root && a[v]) root = v;
  }
}

void dfs2(int u, int p){
  for (auto v : g[u]){
    if (v == p) continue;
    dfs2(v, u);
    a[u] = max(a[u], a[v]);
  }
}

void dfs3(int u, int cur){
  a[u] = 0;
  dis1[u] = cur;
  for (auto v : g[u]){
    if (a[v]){
      dfs3(v, cur + 1);
      dis2[u] = max(dis2[u], dis2[v] + 1);
    }
  }
}

int main(){
  int t;
  cin >> t;
  while (t--){
    int n, u, v, mxLength = 0, cnt = 0;
    cin >> n;
    for (int i = 1; i <= n; i++){
      cin >> a[i];
      dis1[i] = dis2[i] = 0;
      g[i].clear();
    }
    for (int i = 1; i < n; i++){
      cin >> u >> v;
      g[u].push_back(v);
      g[v].push_back(u);
    }
    dfs(1, 0);
    dfs2(root, 0); //cout<<root<<endl;
    for (int i = 1; i <= n; i++){
      if (a[i]) cnt++; //cout<<a[i]<<" ";
    } //cout<<endl;
    dfs3(root, 0);
    for (int i = 1; i <= n; i++){
      mxLength = max(mxLength, dis1[i] + dis2[i]);
    }
    cout << (cnt - 1) * 2 - mxLength << endl;
    root = 0;
    // for (int i = 1; i <= n; i++) cout<<dis1[i]<<" ";cout<<endl;
    // for(int i=1;i<=n; i++)cout<<dis2[i]<<" ";cout<<endl;
  }
}

Information

Submit By
Type
Submission
Problem
P1078 Apple on Tree
Language
C++17 (G++ 13.2.0)
Submit At
2024-08-17 07:37:51
Judged At
2024-08-17 07:37:51
Judged By
Score
40
Total Time
221ms
Peak Memory
25.52 MiB