Submission #1275142

#TimeUsernameProblemLanguageResultExecution timeMemory
1275142k12_khoiPower Plant (JOI20_power)C++17
100 / 100
149 ms27548 KiB
#include <bits/stdc++.h>
using namespace std;

const int N=2e5+5;

int n,x,y,res;
int a[N],down[N],save_sum[N];
char c;
vector <int> adj[N];

void pre_dfs(int u,int par)
{
    int sum=0;

    for (int v:adj[u])
    if (v!=par)
    {
        pre_dfs(v,u);

        sum+=down[v];
    }
    save_sum[u]=sum;

    if (a[u]==0) down[u]=sum;
    else down[u]=max(sum-1,1);

    res=max(res,down[u]);
}

void dfsOne(int u,int par,int ma)
{
    res=max(res,save_sum[u]+ma-a[u]);

    for (int v:adj[u])
    if (v!=par)
        dfsOne(v,u,max(a[u],ma+save_sum[u]-down[v]-a[u]));
}

int main()
{
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL); cout.tie(NULL);

    cin >> n;
    for (int i=1;i<n;i++)
    {
        cin >> x >> y;
        adj[x].push_back(y);
        adj[y].push_back(x);
    }

    res=0;
    for (int i=1;i<=n;i++)
    {
        cin >> c;
        a[i]=c-'0';
        res+=a[i];
    }

    res=min(res,2);
    pre_dfs(1,-1);

    dfsOne(1,-1,0);

    cout << res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...