1. 程式人生 > >【Codeforces Round #482 (Div. 2) C】Kuro and Walking Route

【Codeforces Round #482 (Div. 2) C】Kuro and Walking Route

return lse lac and ios inf == efi div

【鏈接】 我是鏈接,點我呀:)
【題意】


在這裏輸入題意

【題解】


把x..y這條路徑上的點標記一下。

然後從x開始dfs,要求不能走到那些標記過的點上。記錄節點個數為cnt1(包括x)
然後從y開始dfs,也要求不能走到那些標記過的點上。記錄節點個數為cnt2(包括y)
答案就為n(n-1)-cnt1cnt2;
(即所有的點對減去這些不符合要求的點對

【代碼】

#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define inf 0x3f3f3f3f
#define pll pair<ll,ll>
#define rep(i,a,b) for(int i=a;i<=b;i++) #define rep1(i,a,b) for(int i=a;i>=b;i--) #define rson rt<<1|1,m+1,r #define lson rt<<1,l,m using namespace std; const int N=3e5+100; vector<int>G[N]; int vis[N]; int have,n,x,y; int Pre[N+10]; int bo[N+10]; long long cnt[2]; void fx(int
X,int pre){ int len = G[X].size(); for (int Y:G[X]){ if (Y==pre) continue; Pre[Y] = X; fx(Y,X); } } void dfs(int X,int pre,int index){ for (int Y:G[X]){ if (bo[Y]) continue; if (Y==pre) continue; cnt[index]++; dfs(Y,X,index); } } //one more try?ok
int main() { #ifdef LOCAL_DEFINE freopen("F:\\program\\rush\\rush_in.txt","r",stdin); #endif ios::sync_with_stdio(false),cin.tie(0); cin>>n>>x>>y; rep(i,0,n-2) { int a,b; cin>>a>>b; G[a].pb(b); G[b].pb(a); } fx(x,-1); for (int i = y; ;i = Pre[i]){ bo[i] = true; if (i==x) break; } dfs(x,-1,0); dfs(y,-1,1); cnt[0]++;cnt[1]++; cout<<1LL*n*(n-1)-cnt[0]*cnt[1]; return 0; }

【Codeforces Round #482 (Div. 2) C】Kuro and Walking Route