Problem A: Krito的讨伐

Description

Krito终于干掉了99层的boss,来到了第100层。第100层可以表示成一颗树,这棵树有n个节点(编号从0到n-1),树上每一个节点可能有很多只怪物。 Krito现在在0号节点,现在它想要区清除这一层所有的怪物。他现在有atk大小的攻击力。只有当你的攻击力大于这只怪物的防御力时,你才可以打败他,同时每打败只怪物,你会获得一定的攻击力加成。一个节点可能存在着不止一只怪兽,你要打败这个节点的所有怪物才能可以从这个节点通过,请问他能不能完成这个任务?注意:不要求一次性杀光一个节点里面的所有怪物。

相关知识: 摘自维基百科

在计算机科学中,树(英语:tree)是一种抽象资料型别(ADT)或是实作这种抽象资料型别的数据结构,用来模拟具树状结构性质的资料集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

1.每个节点有零个或多个子节点;

2.没有父节点的节点称为根节点;

3.每一个非根节点有且只有一个父节点;

4.除了根节点外,每个子节点可以分为多个不相交的子树;

Input

第1行:一个数T,表示有T个测试样例(0<=T<=50) ,接下来有T个测试样例

对于每一个测试样例:

第1行:两个整数n,m表示这棵树有n个节点,m只怪兽(0<=n<=1000 ,0<=m <=100)

第2至n-1行: 两个整数u,v表示编号为u,v之间的节点有一条无向边,题目保证不会成环。(0<=u,v<n , u!=v)

第3行: 一个整数atk,表示Krito的初始化攻击力(0<=atk<=100)

第4至3+m行:两个整数id,def,add_atk,表示在编号为id的点上,有一只防御力为def的怪物,打败后可以增加add_atk点的攻击力。(0<=add_atk,def<=100)

Output

对于每一个测试样例,如果Krito能够清除所有的怪物,则输出“Oh yes.” 否则,输出“Good Good Study,Day Day Up.”

Sample Input

1 5 2 0 1 0 2 2 3 2 4 11 3 10 2 1 11 0

Sample Output

Oh yes.

HINT

题解:

  题目说中完全杀死这个节点的怪物才能通过这个节点,我们从起始点开始,将能选择的 怪物 压如队列并且这队列是按照防御力从小到大优先的,

  这样可以选择的 点都在这个队列中

  如果当前怪物能被杀死,那么更所在节点信息,单这个节点没有怪物的时候我们加入其儿子的节点信息供选择

  如过不能杀死,也就是不能清除所有的怪物了,跳出即可

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include<queue>
using namespace std;
const int N = 1e6+, M = 1e3+, mod = 1e9+, inf = 1e9+;
typedef long long ll; vector<pair<int,int > >P[M+];
int T,n,m,a,b,vis[N],H[N];
int now ;
struct ss{
int f,s,id;
friend bool operator < (ss a, ss b){return a.f > b.f;}
};
vector<int> G[N];
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&m);
for(int i=;i<n;i++) G[i].clear();
for(int i=;i<n;i++) scanf("%d%d",&a,&b) ,G[a].push_back(b),G[b].push_back(a);
scanf("%d",&now);
for(int i=;i<M;i++) P[i].clear();
for(int i=;i<=m;i++) {
int x,add,f;
scanf("%d%d%d",&x,&f,&add);
P[x].push_back(make_pair(f,add));
}
for(int i=;i<n;i++) if(P[i].size()==) P[i].push_back(make_pair(,));
memset(vis,,sizeof(vis));
memset(H,,sizeof(H));
int ans = ;
priority_queue<ss> q;
for(int j=;j<P[].size();j++) {
int v = ;
ss K;
K.f = P[v][j].first;
K.s = P[v][j].second;
K.id = v;
q.push(K);
}
int times = ;
while(!q.empty()) {
ss k;
k = q.top();
if(now>k.f) now+=k.s,q.pop(),H[k.id]++;
else break;
if(H[k.id] == P[k.id].size()) {
for(int i=;i<G[k.id].size();i++)
for(int j=;j<P[G[k.id][i]].size();j++) {
int v = G[k.id][i];
if(vis[v]) continue;
ss K;
K.f = P[v][j].first;
K.s = P[v][j].second;
K.id = v;
q.push(K);
}
vis[k.id] = ;
}
}
for(int i=;i<n;i++) if(vis[i]) ans++;
if(ans == n) puts("Oh yes.");
else puts("Good Good Study,Day Day Up.");
}
return ;
}

广东工业大学2016校赛决赛-网络赛 1169 Problem A: Krito的讨伐 优先队列的更多相关文章

  1. ACM学习历程—广东工业大学2016校赛决赛-网络赛F 我是好人4(数论)

    题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1031&pid=5 这个题目一看就是一道数论题,应该考虑使用容斥原理,这里对lcm进行容斥. ...

  2. ACM学习历程—广东工业大学2016校赛决赛-网络赛E 积木积水(最值问题 || 动态规划)

    题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1031&pid=4 这个题目自然会考虑到去讨论最长或者最短的板子. 笔上大概模拟一下的话,就 ...

  3. ACM学习历程—广东工业大学2016校赛决赛-网络赛D 二叉树的中序遍历(数据结构)

    题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1031&pid=3 这算是一个胡搞类型的题目.当然肯定是有其数据结构支撑的. 唯一的限制就是 ...

  4. ACM学习历程—广东工业大学2016校赛决赛-网络赛C wintermelon的魔界寻路之旅(最短路 && 递推)

    题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1031&pid=2 题目由于要找对称的路径,那么狠明显可以把右下角的每一块加到左上角对应的每 ...

  5. 广东工业大学2016校赛决赛-网络赛 1174 Problem F 我是好人4 容斥

    Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...

  6. 广东工业大学2016校赛决赛重现——E积木积水(方法据说很多)

    Problem E: 积木积水 Description 现有一堆边长为1的已经放置好的积木,小明(对的,你没看错,的确是陪伴我们成长的那个小明)想知道当下雨天来时会有多少积水.小明又是如此地喜欢二次元 ...

  7. 广州工业大学2016校赛 F 我是好人4 dfs+容斥

    Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...

  8. 第13届 广东工业大学ACM程序设计大赛 C题 平分游戏

    第13届 广东工业大学ACM程序设计大赛 C题 平分游戏 题目描述 转眼间又过了一年,又有一届的师兄师姐要毕业了. ​ 有些师兄师姐就去了景驰科技实习. 在景驰,员工是他们最宝贵的财富.只有把每一个人 ...

  9. HDU 5875 Function -2016 ICPC 大连赛区网络赛

    题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了 ...

随机推荐

  1. ORACLE 11g 生产中高水位线(HWM)处理

    数据库中表不断的insert,delete,update,导致表和索引出现碎片.这会导致HWM之前有很多的空闲空间,而oracle在做全表扫描的时候会读取HWM一下的所有块,这样会产生更多的IO,影响 ...

  2. LayoutInflater源码解析

    Android使用LayoutInflater来进行布局加载,通常获取方式有两种: 第一种: LayoutInflater layoutInflater = LayoutInflater.from(c ...

  3. vuex的状态管理模式

    1.store.js Vuex 通过 store 选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用 Vue.use(Vuex)) state:存放数据. mutations:提交状态 ...

  4. MacType 缺字问题【转】

  5. HOG行人检测 如何制作样品

    原文链接:http://blog.csdn.net/Armily/article/details/8333836 如何制作训练样本 分析了原作者的数据集,结合网上一些资料,下面描述如何制作训练样本 1 ...

  6. springboot-注解讲解

    @Configuration:声明我们JdbcConfig是一个配置类 @PropertySource:指定属性文件的路径是:classpath:jdbc.properties 通过@Value为属性 ...

  7. Flex元素布局规则总结,以及布局和容器

    一.Flex中的元素分类从功能层面可以把Flex中的元素分为组件(Components)和容器(Containers)两大类:组件 - 是指那类具有明确交互或数据展示功能的元素,例如Button.Ch ...

  8. Ubuntu 16.04 安装 Django==1.11.8

    vim  InStall-Django.sh #!/bin/bash rm -rf /usr/bin/python ln -s /usr/bin/python3 /usr/bin/python mkd ...

  9. shell问题-报错即退出

    如下: #!/bin/bash set -o errexit 在最开头加上 set -o errexit 即可(或者 set -e) 要关闭的时候 set +o errexit        (或者 ...

  10. redis过期key删除

    LZ一开始配置到启动类里面,结果出现了主线程阻塞的情况. 如下是流程: 首先修改配置文件redis.conf中的:notify-keyspace-events Ex,默认为notify-keyspac ...