Submission #735436

#TimeUsernameProblemLanguageResultExecution timeMemory
735436alexddPower Plant (JOI20_power)C++17
6 / 100
5 ms5076 KiB
#include<bits/stdc++.h>
using namespace std;
int n;
vector<int> con[200005];
int dp[200005];
bool iss[200005];
int mxm=0;
void dfs(int nod, int par)
{
    int sum=0,cntc=0;
    for(auto adj:con[nod])
    {
        if(adj!=par)
        {
            dfs(adj,nod);
            sum += dp[adj];
            cntc++;
        }
    }
    if(iss[nod])
    {
        dp[nod]=max(1, sum-1);
        if(cntc==1)
            mxm = max(mxm, sum+1);
    }
    else
    {
        dp[nod]=sum;
    }
    mxm = max(mxm, dp[nod]);
    //cout<<nod<<" "<<dp[nod]<<"\n";
}
signed main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    int a,b;
    cin>>n;
    for(int i=1;i<n;i++)
    {
        cin>>a>>b;
        con[a].push_back(b);
        con[b].push_back(a);
    }
    int cnt1=0;
    char ch;
    for(int i=1;i<=n;i++)
    {
        cin>>ch;
        if(ch=='1')
            iss[i]=1;
        else
            iss[i]=0;
        if(iss[i])
            cnt1++;
    }
    dfs(1,0);
    cout<<mxm;
    return 0;
}
/**

dp[i] = scorul maxim pe care il putem obtine daca nu avem nicio statie stricata

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...