/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 13ms 32.277 MiB
#2 Wrong Answer 14ms 31.777 MiB
#3 Wrong Answer 13ms 32.98 MiB
#4 Wrong Answer 15ms 33.062 MiB
#5 Wrong Answer 37ms 32.66 MiB
#6 Wrong Answer 57ms 35.992 MiB
#7 Wrong Answer 47ms 34.012 MiB
#8 Wrong Answer 29ms 32.277 MiB
#9 Wrong Answer 53ms 33.277 MiB
#10 Wrong Answer 65ms 34.105 MiB
#11 Wrong Answer 50ms 32.848 MiB
#12 Wrong Answer 55ms 32.969 MiB
#13 Wrong Answer 32ms 34.363 MiB
#14 Wrong Answer 72ms 33.859 MiB
#15 Wrong Answer 37ms 33.637 MiB
#16 Wrong Answer 29ms 36.293 MiB
#17 Wrong Answer 28ms 32.812 MiB
#18 Wrong Answer 28ms 33.527 MiB
#19 Accepted 77ms 48.926 MiB
#20 Wrong Answer 76ms 42.125 MiB
#21 Wrong Answer 72ms 46.93 MiB
#22 Wrong Answer 104ms 55.52 MiB
#23 Wrong Answer 142ms 39.301 MiB
#24 Wrong Answer 150ms 43.52 MiB
#25 Wrong Answer 91ms 46.02 MiB
#26 Wrong Answer 17ms 33.98 MiB

Code

#include <bits/stdc++.h>
#define ll long long
#define endll '\n';
#define pb push_back
#define all(v) v.begin(), v.end()
using namespace std;

const int mod = 1e9 + 7, N = 1e6;
int n;
vector<int> g[N + 3];

int mx1, mx2;
int ar[N + 3], vis[N + 3];
int dis[N + 3];
int lastNode;
int tracked[N + 3];
int par[N + 3];
int cost[N + 3];
int node2 = 0;
int mx = -1;
void dfs1(int u)
{
  vis[u] = 1;

  for (auto v : g[u])
  {
    if (vis[v] == 0)
    {
      dis[v] = dis[u] + 1;
      dfs1(v);
    }
  }
}

void dfs2(int u)
{
  vis[u] = 1;

  for (auto v : g[u])
  {
    if (vis[v] == 0)
    {
      dis[v] = dis[u] + 1;
      if (dis[v] >= mx && ar[v])
      {
        node2 = v;
      }
      par[v] = u;
      dfs2(v);
    }
  }
}

void dfs3(int u)
{
  vis[u] = 1;

  for (auto v : g[u])
  {
    if (vis[v] == 0)
    {

      dfs3(v);
    }
  }

  if (tracked[u] == 0)
  {
    cost[par[u]] += cost[u] * 2 + ar[u] * 2;
  }
  else
  {
    if (cost[u])
    {
      cost[par[u]] += cost[u] + 1;
    }
    cost[par[u]] += ar[u];
  }

  // cout << u << "__ " << cost[par[u]] << endll;
}

void solve()
{
  cin >> n;
  for (int i = 1; i <= n; i++)
  {
    cin >> ar[i];
  }

  for (int i = 1; i < n; i++)
  {
    int u, v;
    cin >> u >> v;
    g[u].pb(v);
    g[v].pb(u);
  }

  dfs1(1);
  mx = -1;
  mx1 = 1e9;

  mx1 = 1e9, mx2 = -1;
  int node1 = -1;
  for (int i = 1; i <= n; i++)
  {

    vis[i] = 0;
    if (ar[i])
    {
      // cout << "dukse = " << i << endll;
      if (mx1 > dis[i])
      {
        node2 = i;
        mx1 = dis[i];
        node1 = i;
      }
    }

    dis[i] = 0;
  }

  if (node1 == -1)
  {
    cout << 0 << endll;
    return;
  }
  // return;
  // node2 = 0;
  dfs2(node1);
  // return;
  // cout << node1 << " " << node2 << endl;
  // return;
  while (node2 != node1)
  {
    tracked[node2] = 1;
    node2 = par[node2];
  }
  tracked[node1] = 1;
  for (int i = 1; i <= n; i++)
  {
    // cout << i << "_" << tracked[i] << endl;
  }

  for (int i = 1; i <= n; i++)
    vis[i] = 0;

  dfs3(node1);

  cout << cost[node1] << endll;
  for (int i = 1; i <= n; i++)
  {
    g[i].clear();
    vis[i] = par[i] = cost[i] = ar[i] = dis[i] = lastNode = tracked[i] = 0;
    mx1 = -1,
    mx2 = 0;
  }
}

int32_t main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  int t = 1;
  cin >> t;
  while (t--)
  {
    solve();
  }
  return 0;
}

Information

Submit By
Type
Submission
Problem
P1078 Apple on Tree
Language
C++20 (G++ 13.2.0)
Submit At
2024-08-16 19:42:24
Judged At
2024-08-16 19:42:24
Judged By
Score
7
Total Time
150ms
Peak Memory
55.52 MiB