Path of Equal Weight (DFS)

 

Given a non-empty tree with root R, and with weight Wi assigned to each tree node Ti. The weight of a path from R to L is defined to be the sum of the weights
of all the nodes along the path from R to any leaf node L.

Now given any weighted tree, you are supposed to find all the paths with their weights equal to a given number. For example, let's consider the tree showed
in Figure 1: for each node, the upper number is the node ID which is a two-digit number, and the lower number is the weight of that node. Suppose that the given number is 24, then there exists 4 different paths which have the same given weight: {10 5 2 7},
{10 4 10}, {10 3 3 6 2} and {10 3 3 6 2}, which correspond to the red edges in Figure 1.

Figure 1

Input Specification:

Each input file contains one test case. Each case starts with a line containing 0 < N <= 100, the number of nodes in a tree, M (< N), the number of non-leaf
nodes, and 0 < S < 230, the given weight number. The next line contains N positive numbers where Wi (<1000) corresponds to the tree node Ti. Then M lines follow, each in the format:

ID K ID[1] ID[2] ... ID[K]

where ID is a two-digit number representing a given non-leaf node, K is the number of its children, followed by a sequence of two-digit ID's of its children.
For the sake of simplicity, let us fix the root ID to be 00.

Output Specification:

For each test case, print all the paths with weight S in non-increasing order. Each path occupies a line with printed weights from the root to the leaf in
order. All the numbers must be separated by a space with no extra space at the end of the line.

Note: sequence {A1, A2, ..., An} is said to be greater than sequence {B1, B2, ..., Bm} if there exists 1 <= k < min{n, m} such that Ai = Bi for i=1, ... k,
and Ak+1 > Bk+1.

Sample Input:

20 9 24

10 2 4 3 5 10 2 18 9 7 2 2 1 3 12 1 8 6 2 2

00 4 01 02 03 04

02 1 05

04 2 06 07

03 3 11 12 13

06 1 09

07 2 08 10

16 1 15

13 3 14 16 17

17 2 18 19

Sample Output:

10 5 2 7

10 4 10

10 3 3 6 2

10 3 3 6 2

这道30分的题目,提交一次就意外的AC了。

 

就是 建立连接表 DFS+记录路径+权值累加 搜到叶子节点,如果权值之和与要求的的相等时保存路径。

 

最后的排序要点混,但进行三层的判断排序,也就能过了,

#include <iostream>

#include <string>

#include <vector>

#include <algorithm>

using namespace std;

int WW[100];

int visit[100];

vector<int> vv[100];

vector<int> road;

vector<int> RR[100];

int sum,wi;

bool cmp(vector<int> a,vector<int> b)

{

      if(a[0]==b[0]&&a[1]==b[1])

            return a[2]>b[2];

      if(a[0]==b[0])

      return      a[1]>b[1];

      return      a[0]>b[0];

}

void DFS(int root,int &count)

{

    if(visit[root]==0)

      {

         visit[root]=1;

         road.push_back(WW[root]);

       sum+=WW[root];

         for(int i=0;i<vv[root].size();i++)

         {

            if(visit[vv[root][i]]==0)

                    DFS(vv[root][i],count);

         }

         if(sum==wi&&vv[root].size()==0)

         {

            RR[count++]=road;

         }

          road.pop_back();

            sum-=WW[root];

      }

}

int main()

{

      int i,j,num,fnum;

      while(cin>>num)

      {

      road.clear(); 

        cin>>fnum>>wi;

        for(i=0;i<num;i++)

        {

              cin>>WW[i];

              vv[i].clear();

              visit[i]=0;

              RR[i].clear();

        }

        for(i=0;i<fnum;i++)

        {

              int n1,n2;

           cin>>n1>>n2;

            for(j=0;j<n2;j++)

            {

                int tem;

                  cin>>tem;

                  vv[n1].push_back(tem);

            }

        }

      int count=0;

         sum=0;

         DFS(0,count);

      sort(RR,RR+count,cmp);

        for(i=0;i<count;i++)

        {

           cout<<RR[i][0];

            for(j=1;j<RR[i].size();j++)

                  cout<<" "<<RR[i][j];

            cout<<endl;

        }

      }

  return 0;

}

Path of Equal Weight (DFS)的更多相关文章

  1. PAT 甲级 1053 Path of Equal Weight (30 分)(dfs,vector内元素排序,有一小坑点)

    1053 Path of Equal Weight (30 分)   Given a non-empty tree with root R, and with weight W​i​​ assigne ...

  2. PAT 1053 Path of Equal Weight[比较]

    1053 Path of Equal Weight(30 分) Given a non-empty tree with root R, and with weight W​i​​ assigned t ...

  3. pat1053. Path of Equal Weight (30)

    1053. Path of Equal Weight (30) 时间限制 10 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue G ...

  4. pat 甲级 1053. Path of Equal Weight (30)

    1053. Path of Equal Weight (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  5. 1053 Path of Equal Weight——PAT甲级真题

    1053 Path of Equal Weight 给定一个非空的树,树根为 RR. 树中每个节点 TiTi 的权重为 WiWi. 从 RR 到 LL 的路径权重定义为从根节点 RR 到任何叶节点 L ...

  6. 【PAT】1053 Path of Equal Weight(30 分)

    1053 Path of Equal Weight(30 分) Given a non-empty tree with root R, and with weight W​i​​ assigned t ...

  7. PAT_A1053#Path of Equal Weight

    Source: PAT A1053 Path of Equal Weight (30 分) Description: Given a non-empty tree with root R, and w ...

  8. PAT 1053 Path of Equal Weight

    #include <cstdio> #include <cstdlib> #include <vector> #include <algorithm> ...

  9. PAT甲题题解-1053. Path of Equal Weight (30)-dfs

    由于最后输出的路径排序是降序输出,相当于dfs的时候应该先遍历w最大的子节点. 链式前向星的遍历是从最后add的子节点开始,最后添加的应该是w最大的子节点, 因此建树的时候先对child按w从小到大排 ...

随机推荐

  1. 5个让DBA爱上你的SQL技巧

    我的一个同事Martin Masarik,SQLde的CEO,跟我谈起了他的一个DBA朋友,他管理着一个国际银行的Oracle数据库,数据规模约2TB.Martin Masarik曾问他:“什么样的S ...

  2. 关于TreeSet倒序排列和自定义排列

    本文部分转自:http://blog.csdn.net/kaituozhe345/article/details/6842945 1.TreeSet的自然排序. TreeSet存储对象的时候, 可以排 ...

  3. log4net在WinForm和ASP.net下的设置

    下载log4net.dll,放到bin目录下,然后引用到工程.下面说明配置和调用方法. 1.AssemblyInfo.cs末尾添加 [assembly: log4net.Config.XmlConfi ...

  4. hihocoder 1038 01背包

    #1038 : 01背包 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励 ...

  5. sublime安装 less环境

    工具的选择: mac-codekit simpless->跨平台 winless-windows  less.js下载:http://pan.baidu.com/s/1o60yTZ0   安装L ...

  6. Ehcache(2.9.x) - API Developer Guide, Cache Decorators

    About Cache Decorators Ehcache uses the Ehcache interface, of which Cache is an implementation. It i ...

  7. Linux 命令 - cp: 拷贝文件和目录

    命令格式 cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY ...

  8. Nhibernate3.3.3sp1基础搭建测试

    实体类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...

  9. bootstrap学习起步篇:初识bootstrap之表单验证(二)

    学习bootstrap是个过程,它提供给我们的文档上有很详细的说明.包括常用的栅栏布局.页面元素等,这里就不啰嗦了,今天,我就来说下结合jquery的表单验证. 最开始不借助插件,我们需要自己去编写验 ...

  10. 在Ubuntu系统中解压rar和zip文件的方法

    大家在以前的windows系统中会存有很多rar和zip格式的压缩文件,Ubuntu系统默认情况下对这些文件的支持不是很好,如果直接用"归档管理器"打开会提示错误,因此今天跟大家分 ...