NC20133. [JLOI2012]树
描述
输入描述
第一行是两个整数N和S,其中N是树的节点数。
第二行是N个正整数,第i个整数表示节点i的正整数。
接下来的N-1行每行是2个整数x和y,表示y是x的儿子。
输出描述
输出路径节点总和为S的路径数量。
示例1
输入:
3 3 1 2 3 1 2 1 3
输出:
2
C++(clang++ 11.0.1) 解法, 执行用时: 37ms, 内存消耗: 1204K, 提交时间: 2022-11-18 18:53:17
#include<bits/stdc++.h> using namespace std; struct tree{ int val,fa; }a[100010]; int n,root,ans=0,s,len; void work(){ int k; for(int i=1;i<=n;i++){ len=0; int x=0; k=i; while(k!=root){ len++; x+=a[k].val; k=a[k].fa; if(x==s){ans++;break;} if(x>s){ break;//TODO } //TODO } x+=a[k].val; if(x==s)ans++;//TODO } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n>>s; for(int i=1;i<=n;i++){ cin>>a[i].val;//TODO } for(int i=1;i<=n-1;i++){ int x,y; cin>>x>>y; a[y].fa=x;//TODO } for(int i=1;i<=n;i++){ if(a[i].fa==0){ root=i; break; } //TODO } work(); cout<<ans; return 0; }