题解 | 游游的二进制树

游游的二进制树

https://www.nowcoder.com/practice/832141cc566a49ad923bb9ad5bb80fac

注意到,本题用dfs解决,但是要防止溢出,所以写法很关键(不然应该会18/20,别问我咋知道的)代码如下:

#include<bits/stdc++.h>
#include <functional>
#include <vector>
using namespace std;
#define int long long
void solve(){
    int n,l,r;cin>>n>>l>>r;
    string s;cin>>s;
    vector<vector<int>> e(n+1);
    for(int i=1;i<=n-1;i++){
        int a,b;cin>>a>>b;
        e[a].push_back(b);
        e[b].push_back(a);
    }
    int ans=0;
    auto dfs=[&](auto &&self,int u,int pr,int cur,int cnt)->void{
        if(cur>r) return;
        if(cnt>=1&&cur>=l&&cur<=r) ans++;
        for(auto i:e[u]){
            if(i==pr) continue;
            self(self,i,u,cur*2+s[i-1]-'0',cnt+1);
        }
    };
    for(int i=1;i<=n;i++){
        dfs(dfs,i,0,s[i-1]-'0',0);
    }
    cout<<ans;
}
signed main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int t=1;
    // cin>>t;
    while(t--){
        solve();
    }return 0;
}

全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

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