zoukankan      html  css  js  c++  java
  • 搜索练习2

    P3252 [JLOI2012]树

    题目描述

      在这个问题中,给定一个值S和一棵树。在树的每个节点有一个正整数,问有多少条路径的节点总和达到S。路径中节点的深度必须是升序的。假设节点1是根节点,根的深度是0,它的儿子节点的深度为1。路径不必一定从根节点开始。

    输入输出格式

    输入格式:

    第一行是两个整数N和S,其中N是树的节点数。 第二行是N个正整数,第i个整数表示节点i的正整数。 接下来的N-1行每行是2个整数x和y,表示y是x的儿子。

    输出格式:

    输出路径节点总和为S的路径数量。

    输入输出样例

    输入样例#1: 复制
    3 3
    1 2 3
    1 2
    1 3
    输出样例#1: 复制
    2

    说明

    对于100%数据,N<=100000,所有权值以及S都不超过1000。

    Solution:

      简单dfs,

      操作一:检查叶子节点是否能够直接构成一条路并且价值为s

      操作二:对于不是叶子节点的节点,那么我们就向下查找是否在路径上有权值和为s的路径,若存在ans+1

          dfs过程中,一旦权值和>s就不可能存在等于s的情况了,所以直接return

          如果权值和==s,答案+1,即return 1

          否则调用自身,寻找满足上述条件的情况

    Code:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #define LL long long
    using namespace std;
    
    const int M = 100010;
    int n,s,a[M],pre[M*4],to[M*4],head[M],vis[M],edge_num,ans;
    
    void add(int u,int v) {
        pre[++edge_num]=head[u];
        to[edge_num]=v;
        head[u]=edge_num;
    }
    
    LL dfs(int now,int value) {
        if(value>s) return 0;
        if(value==s) return 1;
        LL sum=0;//sum清空
        for(int i=head[now]; i; i=pre[i]) {
            int v=to[i];
            sum+=dfs(v,value+a[v]);
        }
        return sum;
    }
    
    int main() {
        scanf("%d%d",&n,&s);
        for(int i=1; i<=n; i++)
            scanf("%d",&a[i]);
        for(int i=1; i<n; i++) {
            int x,y;
            scanf("%d%d",&x,&y);
            add(x,y);
        }
        for(int i=1; i<=n; i++) {
            if(a[i]==s) ans++;
            else ans+=dfs(i,a[i]);
        }
        printf("%d
    ",ans);
        return 0;
    }
    AC

    自己选的路,跪着也要走完!!!

  • 相关阅读:
    Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
    控制‘控制台应用程序’的关闭操作
    详解for循环(各种用法)
    敏捷软件开发
    Sql Server的一些知识点
    在SharePoint 2010 中配置Remote Blob Storage FILESTREAM Provider
    使用LotusScript操作Lotus Notes RTF域
    JOpt Simple 4.5 发布,命令行解析器
    John the Ripper 1.8.0 发布,密码破解工具
    PacketFence ZEN 4.0.1 发布,网络接入控制
  • 原文地址:https://www.cnblogs.com/wsdestdq/p/7859768.html
Copyright © 2011-2022 走看看