제출 #1364194

#제출 시각아이디문제언어결과실행 시간메모리
1364194ivazivaPower Plant (JOI20_power)C++20
47 / 100
85 ms12708 KiB
#include <bits/stdc++.h>

using namespace std;

#define MAXN 200001
#define int long long

int n;vector<int> adj[MAXN];
int dist[MAXN],parent[MAXN];
vector<int> switches;
set<int> on,breakovani;
int dp[MAXN];string s;

void calculate(int node,int pret)
{
    int children=0;
    for (int sled:adj[node])
    {
        if (sled==pret) continue;
        calculate(sled,node);
        children+=dp[sled];
    }
    if (s[node-1]=='0') dp[node]=max(children,(long long)0);
    else dp[node]=max(children-1,(long long)1);
}

int32_t main()
{
   cin>>n;for (int i=1;i<n;i++) {int u,v;cin>>u>>v;adj[u].push_back(v);adj[v].push_back(u);}
   cin>>s;
   if (n<=2000)
   {
       int answer=0;
       for (int node=1;node<=n;node++)
       {
           if (s[node-1]=='1') answer++;
       }
       if (answer<=2) {cout<<answer<<endl;return 0;}
       answer=0;
       for (int root=1;root<=n;root++)
       {
           for (int node=1;node<=n;node++) dp[node]=0;
           calculate(root,0);answer=max(answer,dp[root]);
       }
       cout<<max(answer,(long long)2)<<endl;return 0;
   }
   return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…