I-马拉松_河南萌新联赛2024第(四)场:河南理工大学 (nowcoder.com)
#include <iostream>
#include <vector>
#include "bits/stdc++.h"
#define int long long
using namespace std;
const int N=3e5+10;
vector<int> g[N];
bool st[N];
long long sun[N];
bool check[N];
int n,x,y;
int e[10000000],ne[100000000],h[10000000],idx;
void add(int x,int y)
{
e[idx]=y,ne[idx]=h[x],h[x]=idx++;
}
void dfs(int u)
{
if(st[u]!=0)
return;
sun[u]=1;
st[u]=1;
if(u==x)
check[u]=1;
for(int i=h[u];i!=-1;i=ne[i])
{
int j=e[i];
if(st[j]==0)
{
dfs(e[i]);
sun[u]+=sun[e[i]];
if(check[e[i]]==1)
check[u]=1;
}
}
}
signed main()
{
cin>>n>>x>>y;
int u,v;
memset(h,-1,sizeof(h));
for(int i=1;i<n;i++)
{
cin>>u>>v;
add(u,v);
add(v,u);
}
dfs(y);
int sum=0;
for(int i=h[y];i!=-1;i=ne[i])
{
int j=e[i];
if(check[j]==1)
{
sum=sun[y]-sun[j];
break;
}
}
int k=sum*sun[x];
cout<<k;
}