// ⋱C⋱r⋱i⋱s⋱t⋱i⋱a⋱n⋱o⋱⋱⋱R⋱o⋱n⋱a⋱l⋱d⋱o⋱.⋱.⋱.⋱.⋱.⋱.⋱G⋱O⋱A⋱T
// P⋱a⋱r⋱t⋱h⋱i⋱v⋱⋱⋱S⋱a⋱r⋱k⋱a⋱r
// ⋱
#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
const long long inf = 1e18;
#define mod 1000000007
#define mod1 998244353
#define maxn 5000000
#define pb push_back
#define ff first
#define ss second
#define rep(i, a, n) for (lli i = a; i < n; i++)
#define rrep(i, n, a) for (lli i = n; i >= a; i--)
#define pie acos(-1.0)
typedef long long ll;
typedef long double ld;
typedef long long int lli;
typedef unsigned long long int llu;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<ll, ll> pl;
typedef vector<pl> vp;
typedef tree <
ll,
null_type,
less<ll>,
rb_tree_tag,
tree_order_statistics_node_update> ordered_set;// find_by_order,order_of_key
#define cin(a, n) \
for (ll i = 0; i < n; i++) \
cin >> a[i];
#define store(b, n) \
for (int i = 0; i < n; i++) \
b[i] = a[i];
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define line cout << endl
ll vis[400005];
vll adj[400005];
vll fact(2000009);
vector<bool> isprime;
vll primes;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
string ds="RLDU";
void sieve(ll n)
{
if ((ll)isprime.size() >= n + 1)
return;
isprime.assign(n + 1, true);
isprime[0] = isprime[1] = false;
ll sqrtn = (ll)(sqrt(n * 1.) + .5);
for (ll i = 2; i <= sqrtn; i++)
if (isprime[i])
{
for (ll j = i * i; j <= n; j += i)
isprime[j] = false;
}
primes.clear();
for (ll i = 2; i <= n; i++)
if (isprime[i])
primes.push_back(i);
}
void factorial()
{
fact[0] = 1;
fact[1] = 1;
for (ll i = 2; i <= 2000009; i++)
{
fact[i] = (i * fact[i - 1]) % mod;
}
}
ll modexpo(ll x, ll y)
{
ll ans = 1;
x = (x % mod);
while (y > 0)
{
if (y & 1)
ans = ((ans % mod) * (x % mod)) % mod;
x = ((x % mod) * (x % mod)) % mod;
y >>= 1;
}
return ans % mod;
}
ll inv_mod(ll x)
{
ll a = 1, p = x, n = 1000000005;
while (n)
{
if (n & 1)
a = (a * p) % mod;
p = (p * p) % mod;
n >>= 1;
}
return a;
}
ll gcd(ll a, ll b)
{
if (b == 0)
return a;
if (a == 0)
return b;
else
return gcd(b, a % b);
}
// SEGMENT TREE IMPLEMENTATION BEGINS ......
ll ar[200005];
ll seg_tree[4*200005];
ll build(ll si,ll s,ll e){
if(s==e)
return seg_tree[si]=ar[s];
ll mid=(s+e)>>1;
return seg_tree[si]=build(2*si,s,mid)^build(2*si+1,mid+1,e);
}
void update(ll si,ll s,ll e,ll ind, ll v){
if(ind<s || ind>e)return;
if(s==e && s==ind){
seg_tree[si]+=v;
return;
}
ll mid=(s+e)>>1;
update(2*si,s,mid,ind,v);
update(2*si+1,mid+1,e,ind,v);
seg_tree[si]=min(seg_tree[2*si],seg_tree[2*si+1]);
}
ll getsum(ll si,ll s,ll e, ll l,ll r){
if(l>e || r<s)return 0;
if(s>=l and e<=r)
return seg_tree[si];
ll mid=(s+e)>>1;
return getsum(2*si,s,mid,l,r)^getsum(2*si+1,mid+1,e,l,r);
}
// ENDS
ll n = 0, k, m = 0;
ll cnt=0;
void dfs(ll src, ll des, bool f){
vis[src]=1;
if(src==des)
f=1;
if(f)
cnt++;
for(auto it:adj[src]){
if(vis[it]==0)
dfs(it,des,f);
}
}
void solve()
{
ll i, j;
cin >> n>>m>>k;
rep(i,1,n){
ll x,y;
cin>>x>>y;
adj[x].pb(y);
adj[y].pb(x);
}
dfs(m,k,0);
ll c1=cnt;
rep(i,1,n+1)
vis[i]=0;
cnt=0;
dfs(k,m,0);
ll c2=cnt;
cout << n*(n-1)-(c2*c1);
}
int main()
{
cin.tie(nullptr);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
// int t;
// cin >> t;
// while (t--)
solve();
return 0;
}
1323. Maximum 69 Number | 832. Flipping an Image |
1295. Find Numbers with Even Number of Digits | 1704. Determine if String Halves Are Alike |
1732. Find the Highest Altitude | 709. To Lower Case |
1688. Count of Matches in Tournament | 1684. Count the Number of Consistent Strings |
1588. Sum of All Odd Length Subarrays | 1662. Check If Two String Arrays are Equivalent |
1832. Check if the Sentence Is Pangram | 1678. Goal Parser Interpretation |
1389. Create Target Array in the Given Order | 1313. Decompress Run-Length Encoded List |
1281. Subtract the Product and Sum of Digits of an Integer | 1342. Number of Steps to Reduce a Number to Zero |
1528. Shuffle String | 1365. How Many Numbers Are Smaller Than the Current Number |
771. Jewels and Stones | 1512. Number of Good Pairs |
672. Richest Customer Wealth | 1470. Shuffle the Array |
1431. Kids With the Greatest Number of Candies | 1480. Running Sum of 1d Array |
682. Baseball Game | 496. Next Greater Element I |
232. Implement Queue using Stacks | 844. Backspace String Compare |
20. Valid Parentheses | 746. Min Cost Climbing Stairs |