Description

  进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通。
每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关。如果小火山取走了这个房间的宝藏,那么这个房间通往其他房间的门就永远打不开了,也就是说后面的宝藏小火山是得不到了(进入这个房间的门是不会关闭的,小火山还是可以回去的);如果小火山不取这个宝藏,而是去打开通往另一房间的门,那么这个房间的宝藏就会消失, 小火山就得不到这个房间的宝藏。
不过,小火山已经有了藏宝图,知道每一个房间的宝藏的价值,现在想请你帮小火山算一下,他最多能获得多少钱去买股票?
Input 输入第一行是一个整数T(T <= ), 表示一共有T组数据。
对于每一组数据,第一行是两个数N, S( <= N <= , <= S <= N), N代表有N个房间, S代表小火山进去宝藏后的
起始房间(小火山怎么进入起始房间不重要),第二行是N个数,代表每个房间宝藏的价值, 随后N-1行, 每行两个数A, B, 代表
A, B这两个房间联通。
Output 对于每一组数据输出一个整数, 代表小火山能获得的最大钱数。 Sample Input Sample Output

题意 从一个房间进入,房间的宝藏如果拿 则通往别的门会关闭,不过不拿,宝藏会消失,给你地图,问能拿到的最大宝藏数。

方法 从这个点出发进行搜索,把一条路走到底,选出这条路上的最大值,所有路的路都走完,看选择这个房间还是这个路上的宝藏。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include <math.h>
#include<queue>
#define ll long long
#define met(a,b) memset(a,b,sizeof(a));
#define N 10010
using namespace std;
struct node
{
int u,v,next;
}Map[N<<];
int k;
int s[N],vis[N],a[N];
void add(int u,int v)
{
Map[k].u=u;
Map[k].v=v;
Map[k].next=a[u];
a[u]=k++;
}
int dfs(int h)
{
int sum=;
vis[h]=;
for(int i=a[h];i!=-;i=Map[i].next)
{
int v=Map[i].v;
if(!vis[v])
{
vis[v]=;
sum+=dfs(v);
}
}
return max(s[h],sum);
}
int main()
{
int t,n,m,e,f;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&s[i]);
k=;
met(a,-);
for(int i=;i<n;i++)
{
scanf("%d %d",&e,&f);
add(e,f);
add(f,e);
}
met(vis,);
printf("%d\n",dfs(m));
}
return ;
}

(zzuli)1907 小火山的宝藏收益的更多相关文章

  1. zzuli 1907: 小火山的宝藏收益 邻接表+DFS

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 113  Solved: 24 SubmitStatusWeb Board Description    ...

  2. ZZULIoj 1907 小火山的宝藏收益

    Description      进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通.   每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关.如果小火山取走了这 ...

  3. zzulioj 1907小火山的宝藏交易(dfs记忆化搜索)

    #include <stdio.h> #include <algorithm> #include <string.h> #include <vector> ...

  4. zzuli 1905 小火山的跳子游戏

    Description   小火山和火山火山在一块玩跳子游戏.规则如下:   1:跳子的起始位置为0,棋盘大小从1到N   2:每次跳子跳k步. 例如当前位置为i, 那么下一步为i + k   3:跳 ...

  5. ZZULIoj 1912 小火山的爱情密码

    Description 小火山获得了一个字符串,然而大火山让小火山从里面截取一段字符串,并且让小火山截取的字符串满足一些字符达到一定数量. 小火山觉得很容易,但是他想要知道他至少得截取多长的字符串. ...

  6. ZZULIoj 1913: 小火山的计算能力

    Description 别人说小火山的计算能力不行,小火山很生气,于是他想证明自己,现在有一个表达式,他想计算出来. Input 首先是一个t(1<=20)表示测试组数.然后一个表达式,表达式长 ...

  7. ZZULIoj 1908 小火山的围棋梦想

    Description   小火山最近喜欢上了围棋.   对于围棋,其实小火山是一窍不通的.现在棋盘上,有很多小火山的棋子. 如果棋盘上有这样的一个位置, 那么这个位置也会变成小火山 的棋子:这样的位 ...

  8. Problem H: 小火山的围棋梦想 多校训练2(小火山专场)

    题目链接:http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1908 题意:如果'.'被'*'围起来,就把'.'变为'*'. 分析:如果是'*'直接输出, ...

  9. Problem A: 小火山的跳子游戏 多校训练2(小火山专场)(周期)

    题目链接:http://acm.zzuli.edu.cn/zzuliacm/problem.php?cid=1158&pid=0 zzuli 1905  题意:如果k=1的话是1,2,3,4. ...

随机推荐

  1. 代码修改mysql字符

    为了不再显示的时候乱码,要修改数据库默认编码.以下以GBK编码页面为例进行说明: 1.修改MYSQL的配置文件:my.ini里面修改default-character-set=gbk2.代码运行时修改 ...

  2. [一]初识JFreeChart

    是什么? Java报表工具 原理? 封装好数据,调用工厂,创建一张图片,返回一个图片的名字,直接在页面上显示即可 怎么做? 需要导入jar,并在web.xml文件中进行相关的配置即可

  3. UOJ#191. 【集训队互测2016】Unknown

    题意:维护一个数列,每个元素是个二维向量,每次可以在后面加一个元素或者删除一个元素.给定P(x,y),询问对于[l,r]区间内的元素$S_i$,$S_i \times P$的最大值是多少. 首先简单地 ...

  4. Eclipse选择rt.jar的源代码的位置

    1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES" 2. ...

  5. ABAP多表关联查询

    inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有 ...

  6. 利用...来字符检測(swift)

    利用...来字符检測(swift) by 伍雪颖 let test = "LesvIo" let interval = "a"..."z" ...

  7. android88 录音机

    package com.itheima.recorder; import android.os.Bundle; import android.app.Activity; import android. ...

  8. JsonUtil对象与json互转

    OrderDto orderDto = JsonUtil.json2Object(json,     new TypeRef<OrderDto>() {     }); package c ...

  9. Linux Bash终端支持中文显示

    方法:修改系统变量LANG 即时生效: LANG=en_US.UTF- 永久生效: 修改.bashrc,加入 fi

  10. Java并发——使用Condition线程间通信

    线程间通信 线程之间除了同步互斥,还要考虑通信.在Java5之前我们的通信方式为:wait 和 notify.Condition的优势是支持多路等待,即可以定义多个Condition,每个condit ...