Submission
Status:
(PP-SSSSSSS)(P-SSSSSSSSSS)(PPPP-SS)(-SSS)(PP-SSSS)(-SSSSSS)
Subtask/Task Score:
{0/4}{0/14}{0/12}{0/7}{0/20}{0/43}
Score: 0
User: Trin1506
Problemset: อพยพปลอดภัย (Quartet)
Language: cpp
Time: 0.013 second
Submitted On: 2026-04-25 14:00:52
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<vector<ll>> adj(200005);
vector<ll> cnt(200005,0);
vector<ll> parent(200005,0);
ll q;
void dfs(ll u,ll p){
parent[u] = p;
if(u<=q)cnt[u] = 1;
for(auto x : adj[u]){
if(x!=p){
dfs(x,u);
cnt[u]+=cnt[x];
}
}
}
int main(){
ll n,m;
cin >> n >> m;
q = n;
for(ll i=0;i<n;i++){
ll u,v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(ll i=0;i<m-1;i++){
ll u,v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1,0);
vector<ll> dp(4);
ll ans =0;
for(ll i=n+1;i<=n+m;i++){
dp.assign(4,0);
if(adj[i].size()>=4){
for(auto x : adj[i]){
ll v = 0;
if(x==parent[i]){
v=n-cnt[i];
}
else v = cnt[x];
dp[3] += dp[2]*v;
dp[2] += dp[1]*v;
dp[1] += dp[0]*v;
dp[0]+=v;
}
}
ans+=dp[3];
}
cout << ans;
}