답안 #846653

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
846653 2023-09-08T08:20:40 Z vjudge1 Torrent (COI16_torrent) C++17
69 / 100
432 ms 36904 KB
#include<bits/stdc++.h>
using namespace std;

const int N=3e5+5;
int n,a,b;
vector<int> g[N],vt[N],res;
int dp[N];
bool ck[N];
pair<int,int> p;

bool kt(int u,int v)
{
    if(u==p.first && v==p.second)
        return false;
    if(u==p.second && v==p.first)
        return false;
    return true;
}

void dis(int u)
{
    ck[u]=true;
    if(u==b){
        dp[b]=1;
        res.push_back(b);
        return;
    }
    for(auto v:g[u]){
        if(!ck[v]){
            dis(v);
            dp[u]|=dp[v];
        }
    }
    if(dp[u])
        res.push_back(u);

}

void dfs(int u)
{
    vt[u].clear();
    dp[u]=1;
    for(auto v:g[u]){
        if(dp[v]==0 && kt(u,v)){
            dfs(v);
            vt[u].push_back(dp[v]);
        }
    }
    sort(vt[u].begin(),vt[u].end(),greater<int>());
    for(int i=0;i<vt[u].size();i++)
        dp[u]=max(dp[u],vt[u][i]+1+i);
}

int main()
{
    int now,ans=1e9;
    cin>>n>>a>>b;
    int x,y;
    for(int i=1;i<n;i++){
        cin>>x>>y;
        g[x].push_back(y);
        g[y].push_back(x);
    }

    dis(a);
    int lef=0,rig=res.size()-2,mid;
    while(lef<=rig){
        mid=(lef+rig)>>1;
        memset(dp,0,sizeof(dp));
        p={res[mid],res[mid+1]};
        dfs(a),dfs(b);
        if(dp[a]>dp[b])
            rig=mid-1;
        else
            lef=mid+1;
        now=max(dp[a]-1,dp[b]-1);
        ans=min(ans,now);
    }
    cout<<ans;
}

Compilation message

torrent.cpp: In function 'void dfs(int)':
torrent.cpp:50:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |     for(int i=0;i<vt[u].size();i++)
      |                 ~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 15708 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 377 ms 31304 KB Output is correct
2 Correct 432 ms 32964 KB Output is correct
3 Correct 419 ms 34444 KB Output is correct
4 Correct 381 ms 34516 KB Output is correct
5 Correct 399 ms 31568 KB Output is correct
6 Correct 333 ms 32396 KB Output is correct
7 Correct 329 ms 36904 KB Output is correct