Submission #1162325

#TimeUsernameProblemLanguageResultExecution timeMemory
1162325hengliaoJOI tour (JOI24_joitour)C++20
20 / 100
3074 ms32512 KiB
#include "joitour.h" #include<bits/stdc++.h> using namespace std; #define F first #define S second #define pll pair<ll, ll> #define vll vector<ll> #define pb push_back typedef long long ll; const ll mxN=2e5+5; vll adj[mxN]; ll dp[mxN][3]; ll ans; ll a[mxN]; ll sum[3]; void dfs(ll cur, ll par){ for(ll i=0;i<3;i++) dp[cur][i]=0; dp[cur][a[cur]]++; sum[a[cur]]++; for(auto &chd:adj[cur]){ if(chd==par) continue; dfs(chd, cur); for(ll i=0;i<3;i++){ dp[cur][i]+=dp[chd][i]; } } } void dfs2(ll cur, ll par){ if(a[cur]==1){ for(auto &chd:adj[cur]){ if(chd==par) continue; ans+=dp[chd][0]*(sum[2]-dp[chd][2]); } ans+=(sum[0]-dp[cur][0])*dp[cur][2]; } for(auto &chd:adj[cur]){ if(chd==par) continue; dfs2(chd, cur); } } void init(int n, vector<int> tep, vector<int> u, vector<int> v, int q) { for(ll i=0;i<n;i++){ a[i]=tep[i]; } for(ll i=0;i<n-1;i++){ adj[u[i]].pb(v[i]); adj[v[i]].pb(u[i]); } } void change(int X, int Y) { a[X]=Y; } long long num_tours() { ans=0; for(ll i=0;i<3;i++) sum[i]=0; dfs(0, -1); dfs2(0, -1); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...