結果
問題 | No.2337 Equidistant |
ユーザー |
|
提出日時 | 2023-06-02 22:45:12 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2,589 ms / 4,000 ms |
コード長 | 2,941 bytes |
コンパイル時間 | 4,379 ms |
コンパイル使用メモリ | 257,560 KB |
最終ジャッジ日時 | 2025-02-13 19:46:06 |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 28 |
ソースコード
#include<bits/stdc++.h>#include<atcoder/all>using namespace std;using namespace atcoder;typedef long long int ll;typedef long double ld;typedef vector<ll> vi;typedef vector<vi> vvi;typedef vector<vvi> vvvi;typedef vector<vvvi> vvvvi;typedef pair<ll,ll> pi;typedef pair<ll,pi> ppi;typedef pair<ll,ppi> pppi;typedef pair<ll,pppi> ppppi;#define FOR(i,l,r) for(ll i=l;i<r;i++)#define REP(i,n) FOR(i,0,n)#define RFOR(i,l,r) for(ll i=r-1;i>=l;i--)#define RREP(i,n) RFOR(i,0,n)#define ALL(x) x.begin(),x.end()#define F first#define S second#define BS(A,x) binary_search(ALL(A),x)#define LB(A,x) (ll)(lower_bound(ALL(A),x)-A.begin())#define UB(A,x) (ll)(upper_bound(ALL(A),x)-A.begin())#define COU(A,x) (UB(A,x)-LB(A,x))#define sz(c) ((ll)(c).size())/*#include<boost/multiprecision/cpp_int.hpp>namespace mp=boost::multiprecision;using Bint=mp::cpp_int;*/template<typename T>using min_priority_queue=priority_queue<T,vector<T>,greater<T>>;template<typename T1,typename T2>ostream&operator<<(ostream&os,pair<T1,T2>&p){os<<p.F<<" "<<p.S;return os;}template<typename T1,typename T2>istream&operator>>(istream&is,pair<T1,T2>&p){is>>p.F>>p.S;return is;}template<typename T>ostream&operator<<(ostream&os,vector<T>&v){REP(i,sz(v))os<<v[i]<<(i+1!=sz(v)?" ":"");return os;}template<typename T>istream&operator>>(istream&is,vector<T>&v){for(T&in:v)is>>in;return is;}template<class T>bool chmax(T&a,T b){if(a<b){a=b;return 1;}return 0;}template<class T>bool chmin(T&a,T b){if(b<a){a=b;return 1;}return 0;}ld dist(ld x1,ld y1,ld x2,ld y2){return sqrtl((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}//*using mint=modint998244353;const ll mod=998244353;const ld EPS=1e-8;//*//*using mint=modint1000000007;const ll mod=1000000007;//*///using mint=modint;//*typedef vector<mint> vm;typedef vector<vm> vvm;typedef vector<vvm> vvvm;typedef vector<vvvm> vvvvm;ostream&operator<<(ostream&os,mint&a){os<<a.val();return os;}//*/vvi E(2e5),T(20,vi(2e5));vi P(2e5,-1),D(2e5),S(2e5,1);void dfs(ll v){for(auto u:E[v])if(P[u]==-1){P[u]=v;D[u]=D[v]+1;dfs(u);S[v]+=S[u];}}ll up(ll v,ll d){if(d>2e5)return 0;REP(i,20)if((d>>i)%2)v=T[i][v];return v;}ll lca(ll u,ll v){if(D[u]>D[v])swap(u,v);v=up(v,D[v]-D[u]);ll l=-1,r=D[v];while(r-l>1){ll m=(l+r)/2;if(up(v,m)==up(u,m))r=m;else l=m;}return up(u,r);}int main(){ll N,_;cin>>N>>_;REP(i,N-1){ll u,v;cin>>u>>v;u--;v--;E[u].emplace_back(v);E[v].emplace_back(u);}P[0]=0;dfs(0);T[0]=P;FOR(i,1,20)REP(v,N)T[i][v]=T[i-1][T[i-1][v]];while(_--){ll s,t;cin>>s>>t;s--;t--;if((D[s]-D[t])%2){cout<<0<<endl;continue;}ll u=lca(s,t);if(D[s]==D[t]){ll d=D[s]-D[u];ll _s=up(s,d-1);ll _t=up(t,d-1);cout<<N-S[_s]-S[_t]<<endl;continue;}if(D[s]<D[t])swap(s,t);ll d=D[u]*(-2)+D[s]+D[t];ll v=up(s,d/2);ll _v=up(s,d/2-1);cout<<S[v]-S[_v]<<endl;}return 0;}