이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
vector<int> dp;
vector<vector<int>> adj;
vector<int> depth;
void dfs(int x , int p)
{
    for(auto u : adj[x])
    {
        if(u == p)
            continue;
        depth[u] = depth[x] + 1;
        dp[u] = dp[x] + (int)adj[x].size() - 2;
        dfs(u,x);
    }
}
int main()
{
    int n , t , m;
    cin>>n>>t>>m;
    adj.assign(n + 1 , {});
    dp.assign(n + 1 , 2e9);
    depth = dp;
    for(int i = 0 ; i < n - 1 ; i++)
    {
        int u , v;
        cin>>u>>v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    depth[m] = 1;
    dp[m] = 0;
    dfs(m , t);
    int ans = 2e9;
    for(int i = 1 ; i <= n ; i++)
    {
        if(i == t)
            continue;
        if((int)adj[i].size() - 1 + dp[i] <= depth[i])
        {
            ans = min(ans , (int)adj[i].size() - 2 + dp[i] + depth[i]);
        }
        if((int)adj[i].size() == 1)
        {
            ans = min(ans , depth[i] + (int)adj[i].size() - 2 + dp[i]);
        }
    }
    cout<<ans<<'\n';
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |