Submission #296049

#TimeUsernameProblemLanguageResultExecution timeMemory
296049nafis_shifatPower Plant (JOI20_power)C++14
100 / 100
294 ms41140 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> using namespace std; const int mxn=2e5+5; const int inf=1e9; vector<int> adj[mxn]; int dp[mxn][2]={}; int ans[mxn]={}; int tp[mxn]={}; int sz[mxn]={}; int fa[mxn]={}; void dfs1(int cur,int prev) { sz[cur]=(tp[cur]==1); fa[cur]=(tp[cur]==1); for(int u: adj[cur]) { if(u==prev) continue; dfs1(u,cur); sz[cur]+=sz[u]; if(tp[cur]==0) { fa[cur]+=fa[u]; } } } void dfs(int cur,int prev) { int mx1=0; int sm=0; int mx2=0; int sm2=0; int mx3=0; for(int u : adj[cur]) { if(u==prev)continue; dfs(u,cur); mx1=max(mx1,dp[u][0]); mx2=max(mx2,fa[u]); mx3=max(mx3,dp[u][1]); sm+=fa[u]; sm2+=max(fa[u],dp[u][1]); } if(tp[cur]==0) { dp[cur][0]=max({mx1,mx2,sm}); dp[cur][1]=sm2; ans[cur]=max(dp[cur][0],dp[cur][1]); } else { dp[cur][0]=max({mx2+1,mx3+1}); dp[cur][1]=max({mx3-1,mx2-1,sm2-1,sm-1}); ans[cur]=max({dp[cur][0],mx1,mx3+1,mx2+1,sm2-1,sm-1}); } } int main() { int n; cin>>n; for(int i=1;i<n;i++) { int u,v; scanf("%d%d",&u,&v); adj[u].push_back(v); adj[v].push_back(u); } string s; cin>>s; for(int i=0;i<n;i++) tp[i+1]=s[i]-'0'; dfs1(1,-1); dfs(1,-1); int res=0; for(int i=1;i<=n;i++) res=max(res,ans[i]); cout<<res<<endl; }

Compilation message (stderr)

power.cpp: In function 'int main()':
power.cpp:87:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   87 |   scanf("%d%d",&u,&v);
      |   ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...