zoukankan      html  css  js  c++  java
  • [JLOI] 树

    截图于Donny_You的博客

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<set>
     4 using namespace std;
     5 const int maxn=1e5+7;
     6 int n,ss,ans;
     7 int val[maxn],sum[maxn];
     8 set < int > s;
     9 struct Edge{
    10     int next,to;
    11 }edge[maxn];
    12 int head[maxn],num,fa[maxn];
    13 void add(int from,int to){
    14     edge[++num].next=head[from];
    15     edge[num].to=to;
    16     head[from]=num; 
    17 } 
    18 void dfs(int x){
    19     sum[x]=sum[fa[x]]+val[x];
    20     s.insert(sum[x]);
    21     if(s.count(sum[x]-ss)) ans++;
    22     for(int i=head[x];i;i=edge[i].next){
    23         int v=edge[i].to;
    24         dfs(v);
    25     }
    26     s.erase(sum[x]);
    27 }
    28 int main(){
    29     cin>>n>>ss;
    30     for(int i=1;i<=n;i++) cin>>val[i]; 
    31     for(int i=1;i<n;i++){
    32         int x,y;cin>>x>>y;
    33         fa[y]=x;
    34         add(x,y); 
    35     }
    36     s.insert(0);
    37     dfs(1);
    38     cout<<ans<<endl;
    39     return 0;
    40 }

     这个代码还没调出来:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<bitset>
     4 using namespace std;
     5 const int maxn=1e5+7;
     6 bitset<maxn>bt;
     7 int n,s,sum,h=1,t=0,ans;
     8 int val[maxn];
     9 struct Edge{
    10     int next,to;
    11 }edge[maxn];
    12 int head[maxn],num,q[maxn];
    13 void add(int from,int to){
    14     edge[++num].next=head[from];
    15     edge[num].to=to;
    16     head[from]=num; 
    17 } 
    18 void dfs(int u){
    19     cout<<u<<" "<<sum<<" "<<ans<<"   "<<h<<" "<<t<<": ";
    20     for(int i=h;i<=t;i++) cout<<q[i]<<" ";
    21     cout<<endl; 
    22     if(sum==s){
    23         ans++;
    24         if(head[u]){sum-=val[q[h]];h++;}
    25         else return;
    26     }
    27     if(sum>s){
    28         int he=h,su=sum;
    29         while(sum>s){
    30             sum-=val[q[h]];h++;
    31         }
    32         if(sum==s) {
    33             ans++;cout<<"sum "<<sum<<" "; 
    34             sum-=val[q[h]];h++;cout<<sum<<endl;
    35         }
    36         if(sum<s) dfs(u);
    37         h=he;sum=su;
    38     }
    39     if(head[u]==0) return;
    40     int he=h,su=sum;
    41     for(int i=head[u];i;i=edge[i].next){
    42         h=he;sum=su;
    43         int v=edge[i].to;
    44         q[++t]=v;sum+=val[v];
    45         dfs(v);
    46         sum-=val[v];t--;
    47     }
    48     return;
    49 }
    50 int main(){
    51     cin>>n>>s;
    52     for(int i=1;i<=n;i++) cin>>val[i];
    53     for(int i=1;i<n;i++){
    54         int x,y;cin>>x>>y;add(x,y);
    55     }
    56     sum=val[1];q[++t]=1;dfs(1);
    57     cout<<ans<<endl;
    58     return 0;
    59 } 
  • 相关阅读:
    mac pro发热发热发热
    从零开始搭建Vue组件库
    Charles模拟弱网测试
    webpack
    异步加载脚本
    Angular
    JavaScript模板语言
    Node.js
    gulp
    jsonp原理
  • 原文地址:https://www.cnblogs.com/lcan/p/9564126.html
Copyright © 2011-2022 走看看