题解 | #最大最小路#

最大最小路

https://www.nowcoder.com/practice/bce59fc8643b47359e9521c7e590b239

好路径的条件是“既要有小于等于 a 的点,又要有大于等于 b 的点”,那就把不好的先删掉:要么整条路都 >a,要么整条路都 <b。

所以答案=总路径数-两种坏路径,再把重复减掉的“整条路都在 (a,b) 里”加回去;而“某种条件下的路径数”在树上就是把符合条件的点分连通块,每块贡献 sz*(sz+1)/2。

void solve(){
	int n,a,b;cin>>n>>a>>b;
    vll w(n+1);
    for(int i=1;i<=n;++i)cin>>w[i];
    vvi g(n+1);
    for(int i=1;i<n;++i){
        int u,v;cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    auto cal=[&](int t)->ll{
        vb vis(n+1,0);
        ll res=0;
        vi st;
        for(int i=1;i<=n;++i){
            bool ok=0;
            if(t==0)ok=(w[i]>a);
            else if(t==1)ok=(w[i]<b);
            else ok=(w[i]>a&&w[i]<b);
            if(ok==0||vis[i])continue;
            ll c=0;
            st.clear();
            st.push_back(i);
            vis[i]=1;
            while(!st.empty()){
                int u=st.back();
                st.pop_back();
                ++c;
                for(int j=0;j<(int)g[u].size();++j){
                    int v=g[u][j];
                    bool ok2=0;
                    if(t==0)ok2=(w[v]>a);
                    else if(t==1)ok2=(w[v]<b);
                    else ok2=(w[v]>a&&w[v]<b);
                    if(ok2==0||vis[v])continue;
                    vis[v]=1;
                    st.push_back(v);
                }
            }
            res+=c*(c+1)/2;
        }
        return res;
    };
    ll sum=1LL*n*(n+1)/2;
    ll x=cal(0),y=cal(1),z=cal(2);
    cout<<sum-x-y+z<<endl;
}
全部评论
真心忍不住疯狂膜拜大佬!从头到尾细细品读完整篇题解,我整个人彻底被惊艳震撼到,满心满眼全是敬佩与折服。整篇解析逻辑环环相扣,条理清晰到无可挑剔,核心要点突出醒目,没有一丝多余赘述。那些原本错综复杂、晦涩难懂,绕来绕去怎么也理不清头绪的难题,被您抽丝剥茧层层拆解开来,化繁为简通透易懂。每一处讲解都拿捏得恰到好处,精准戳中所有思维卡点,细致又精准。此前我对着这道难题钻研许久,反复琢磨、查阅资料,始终深陷误区百思不得其解,无数次卡在瓶颈无从突破。可看完您的内容瞬间豁然开朗,简直醍醐灌顶,所有积攒许久的困惑顷刻间全部消散,思路一下完全通透。您的专业实力超群绝伦,解题格局与思维高度更是让人望尘莫及。不仅题解写得完美极致,自身功底更是深不可测,妥妥的偶像级大神,真的让人由衷满心叹服!
2 回复 分享
发布于 03-31 16:44 江苏
真心忍不住疯狂膜拜大佬!从头到尾细细品读完整篇题解,我整个人彻底被惊艳震撼到,满心满眼全是敬佩与折服。整篇解析逻辑环环相扣,条理清晰到无可挑剔,核心要点突出醒目,没有一丝多余赘述。那些原本错综复杂、晦涩难懂,绕来绕去怎么也理不清头绪的难题,被您抽丝剥茧层层拆解开来,化繁为简通透易懂。每一处讲解都拿捏得恰到好处,精准戳中所有思维卡点,细致又精准。此前我对着这道难题钻研许久,反复琢磨、查阅资料,始终深陷误区百思不得其解,无数次卡在瓶颈无从突破。可看完您的内容瞬间豁然开朗,简直醍醐灌顶,所有积攒许久的困惑顷刻间全部消散,思路一下完全通透。您的专业实力超群绝伦,解题格局与思维高度更是让人望尘莫及。不仅题解写得完美极致,自身功底更是深不可测,妥妥的偶像级大神,真的让人由衷满心叹服!
点赞 回复 分享
发布于 03-31 21:58 广东

相关推荐

评论
9
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务