zzuli 1907: 小火山的宝藏收益

***题意:中文的

做法:邻接表+DFS,就相当于搜一棵树,比较一下当前结点得到的宝藏多还是子树下面得到的宝藏多,仔细想想就是水题***

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<queue>
#include<vector>
#include<algorithm>

using namespace std;
typedef long long LL;
#define N 10100
#define INF 0x3f3f3f

struct node
{
    int v, next;
} maps[N<<2];
int a[N];
int head[N], k;
int vis[N];

void add(int u, int v)
{
    maps[k].v=v;
    maps[k].next=head[u];
    head[u]=k++;
}

int DFS(int s)
{
    int sum=0;
    vis[s]=1;
    for(int i=head[s]; i!=-1; i=maps[i].next)
    {
        int v=maps[i].v;
        if(!vis[v])
        {
            vis[v]=1;
            sum+=DFS(v);
            //vis[v]=0;
        }
    }
    return max(a[s], sum);
}

int main()
{
    int T, n, s, u, v;
    scanf("%d", &T);

    while(T--)
    {
        memset(head, -1, sizeof(head));
        memset(vis, 0, sizeof(vis));
        k=0;
        scanf("%d%d", &n, &s);
        for(int i=1; i<=n; i++)
            scanf("%d", &a[i]);
        for(int i=1; i<n; i++)
        {
            scanf("%d%d", &u, &v);
            add(u, v);
            add(v, u);
        }
        vis[s]=1;
        printf("%d\n", DFS(s));
    }
    return 0 ;
}
时间: 2024-10-27 07:56:42

zzuli 1907: 小火山的宝藏收益的相关文章

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

Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 113  Solved: 24 SubmitStatusWeb Board Description 进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通. 每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关.如果小火山取走了这个房间的宝藏,那么这个房间通往其他房间的门就永远打不开了,也就是说后面的宝藏小火山是得不到了(进入这个房间的门是不会关闭的,小火山还是可以回去的

(zzuli)1907 小火山的宝藏收益

Description 进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通. 每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关.如果小火山取走了这个房间的宝藏,那么这个房间通往其他房间的门就永远打不开了,也就是说后面的宝藏小火山是得不到了(进入这个房间的门是不会关闭的,小火山还是可以回去的):如果小火山不取这个宝藏,而是去打开通往另一房间的门,那么这个房间的宝藏就会消失, 小火山就得不到这个房间的宝藏. 不过,小火山已经有了藏宝图,知道每一个房间的宝藏的价

ZZULIoj 1907 小火山的宝藏收益

Description 进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通. 每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关.如果小火山取走了这个房间的宝藏,那么这个房间通往其他房间的门就永远打不开了,也就是说后面的宝藏小火山是得不到了(进入这个房间的门是不会关闭的,小火山还是可以回去的):如果小火山不取这个宝藏,而是去打开通往另一房间的门,那么这个房间的宝藏就会消失, 小火山就得不到这个房间的宝藏. 不过,小火山已经有了藏宝图,知道每一个房间的宝藏的价

小火山的宝藏收益 多校训练2(小火山专场) poj(邻接表+DFS)

http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1907 Description 进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通. 每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关.如果小火山取走了这个房间的宝藏,那么这个房间通往其他房间的门就永远打不开了,也就是说后面的宝藏小火山是得不到了(进入这个房间的门是不会关闭的,小火山还是可以回去的):如果小火山不取这个宝藏,而是去打开通往另一房间的门,那么这个

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

#include <stdio.h> #include <algorithm> #include <string.h> #include <vector> using namespace std; int m, n, vis[11000]; long long dp[11000], v[11000]; vector<int>Q[11000]; long long dfs(int start) { int len; len = Q[start].s

zzuli 1905 小火山的跳子游戏

Description 小火山和火山火山在一块玩跳子游戏.规则如下: 1:跳子的起始位置为0,棋盘大小从1到N 2:每次跳子跳k步. 例如当前位置为i, 那么下一步为i + k 3:跳子过程中,碰到1或N则往回跳.例如当前位置为4, N = 6, K = 5的 时候, 那么下次跳子, 应该是 5, 6, 5 ,4, 3.最后落在3的位置, 再一次 跳子为2 1 2 3 4.最后落在4的位置: 现在小火山想知道经过任意次跳子最后能否将这个棋盘上的每个数字都走过. Input 输入第一行是一个整数T

ZZULIoj 1908 小火山的围棋梦想

Description 小火山最近喜欢上了围棋. 对于围棋,其实小火山是一窍不通的.现在棋盘上,有很多小火山的棋子. 如果棋盘上有这样的一个位置, 那么这个位置也会变成小火山 的棋子:这样的位置是指小火山的棋子将该位置围起来. 现在,小火山想知道实际棋盘是什么样子的. 你快来帮帮他吧! Input 输入第一行是一个整数T(T <= 30), 表示一共有T组数据. 每组数据,第一行为两个整数n, m(1 <= n, m <= 25),  随后一个n*m的矩阵代表棋盘,其中".&q

ZZULIoj 1913: 小火山的计算能力

Description 别人说小火山的计算能力不行,小火山很生气,于是他想证明自己,现在有一个表达式,他想计算出来. Input 首先是一个t(1<=20)表示测试组数.然后一个表达式,表达式长度不超过200,只有加法和减法,并且保证第一个字符不会是运算符号,最终结果小于2^63-1. Output 输出运算结果. Sample Input 2 1+1 2+1-1 Sample Output 2 2 1 #include<cstdio> 2 #include<string.h>

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

题目链接:http://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1908 题意:如果'.'被'*'围起来,就把'.'变为'*'. 分析:如果是'*'直接输出,如果是'.' 则要对其搜索 如果四个方向都是封闭的,则可以改变.即w[i][j]=4; 如果查询的是'*'或者查询的是已被查询过的'.'  ,则记录上: 如果查询的是'.'而且没有查询标记过,则进行查询: 1 #include<iostream> 2 #include<algorithm&g