首先我们要考虑这样一个东西, 给你n个节点如何构造最大的f[u]-f[v] 不妨可以猜测如果是菊花+链的情况一定是最大的 alt

所以最大一定是 (a-1)*b,其中a+b等于n 通过不等式知识可以知道ab越相近,乘积越大 那么,知道最大的构造,如何构建两个最大的中间的情况呢?

将一个菊花的叶子取下来塞在链条上面,就可以实现maxx-2 就是说,n个节点一定可以构造x<=(a-1)*b,且x和(a-1)*b奇偶性相同 所以,就if else出来了

    int m,n;
    cin>>n;
    int x = sqrt(n);
    if(x*x ==n ){
        cout<<2*x+1<<endl;
    }
    else if(x*(x+1) >= n&&(x*(x+1)%2) == n%2){
        cout<<2*x+2<<endl;
    }
    else if((x-1)*(x+2)>=n&&(x-1)*(x+2)%2 == n%2)
        cout<<2*x+2<<endl;
    else if(((x+1)*(x+1)%2) == n%2)
        cout<<2*x+3<<endl;
    else if((x+2)*x >=n&&(x+2)*x%2 ==n%2){
        cout<<2*x+3<<endl;
    }
    else cout<<2*x+4<<endl;
}
```cpp