제출 #519173

#제출 시각아이디문제언어결과실행 시간메모리
519173MOUF_MAHMALATTorrent (COI16_torrent)C++14
69 / 100
668 ms31936 KiB
#include<bits/stdc++.h>
#define all(s) s.begin(),s.end()
#define F first
#define S second
using namespace std;
typedef int ll;
ll n,a,b,x,y,dp[300009],pp[300009];
vector<vector<ll> >v;
vector<ll>bin;
inline void dfs(ll d,ll p)
{
    pp[d]=p;
    for(auto&z:v[d])
        if(z!=p)
            dfs(z,d);
}
inline void best(ll d,ll p)
{
    dp[d]=0;
    vector<ll>o;
    for(auto&z:v[d])
    {
        if(z==p||(d==x&&z==y)||(d==y&&z==x))
            continue;
        best(z,d);
        o.push_back(dp[z]);
    }
    sort(all(o),greater<ll>());
    for(ll i=0; i<o.size(); i++)
        dp[d]=max(dp[d],o[i]+i+1);
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>n>>a>>b;
    v.resize(n+1);
    for(ll i=1; i<n; i++)
    {
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    dfs(a,0);
    x=b;
    while(x)
    {
        bin.push_back(x);
        x=pp[x];
    }
    reverse(all(bin));
    ll l=0,r=bin.size()-1,m;
    while(r-l>1)
    {
        m=(l+r)>>1;
        x=bin[l];
        y=bin[l+1];
        best(a,0);
        best(b,0);
        ll op1=max(dp[a],dp[b]);
        x=bin[m];
        y=bin[m+1];
        best(a,0);
        best(b,0);
        ll op2=max(dp[a],dp[b]);
        if(op1<op2)
            r=m;
        else
            l=m;
    }
    x=bin[l];
    y=bin[l+1];
    best(a,0);
    best(b,0);
    cout<<max(dp[a],dp[b]);
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

torrent.cpp: In function 'void best(ll, ll)':
torrent.cpp:29:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |     for(ll i=0; i<o.size(); i++)
      |                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...