ZSTU 4248 KI的目标(dfs)
KI的目标
Time Limit: 2 Sec Memory Limit: 128 MB
Submit: 308 Solved: 77
Description
KI给自己制定了最近制定了一些学习目标,因为有些大目标的达到要先完成一些小目标,所以KI就下意识的把这些目标连成了一棵树,以1号目标为根。
KI是个很谨慎的人,于是他请他的朋友们对这棵树上的每条边评估了一个努力值cost(i),并对每个目标评估了一个
价值val(i)。
然后KI决定去掉树上的一些不可行的目标,他判断的依据是:
假设目标v属于以u为根的子树,如果dis(u,v)<val(u)-val(v),那么以v为根的整棵子树都会被去掉。(dis(u,v)从节点u到节点v所有边的边权和)
请帮KI计算一下最后他还剩下几个目标。
Input
第一行有个整数T, 表示测试组数。T≦101。
接下来每个测试组,第一行给出一个数n, 表示当前这棵树的节点数。
接下来n-1行,每行有两个数x y cost:表示x个节点和y节点间有条边, 这条边的努力值为cost。
接下来一行,有n个数,第i个数表示val(i)。
1 <= x,y <= n <= 100000, -1e9 <= try(i),val(i) <= 1e9
Output
对于每个测试组,把对应的答案在一行中输出。
Sample Input
1
6
1 2 1
2 3 5
2 4 -10
1 5 3
5 6 4
6 5 4 5 3 6
Sample Output
5
HINT
Source
假设目标v属于以u为根的子树,如果dis(u,v)<val(u)-val(v),那么以v为根的整棵子树都会被去掉。
我们假设$dist(n)$为从$1$号根节点出发走到$n$号节点时经过的边的边权总和。
那么,要使$dis(u,v)<val(u)-val(v)$,
则$dist(v)-dist(u)<val(u)-val(v)$,
即$dist(v)+val(v)<dist(u)+val(u)$.
那么就很明显了,跑一遍DFS计算出$dist(i)+val(i)$再根据题目信息更新答案即可。
#include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i(a); i <= (b); ++i)
#define for_edge(i,x) for(int i = H[x]; i; i = X[i])
#define LL long long const int N = 100010; int E[N << 1], H[N << 1], X[N << 1], vis[N], f[N], fa[N], fl[N];
int x, y, T, n, et, ans;
LL V[N << 1], a[N], c[N], dist[N], val; inline void addedge(int a, int b, LL c){
E[++et] = b, X[et] = H[a], H[a] = et, V[et] = c;
E[++et] = a, X[et] = H[b], H[b] = et, V[et] = c;
} void dfs(int x, LL num){
vis[x] = 1; dist[x] = num;
for_edge(i, x){
int v = E[i];
if (!vis[v]){
fa[v] = x;
dfs(v, num + V[i]);
}
}
} void work(int x){
vis[x] = 1; fl[x] = 0;
for_edge(i, x){
int v = E[i];
if (v != fa[x]){ if (!vis[v]) work(v); }
}
} int main(){ scanf("%d", &T);
while (T--){
scanf("%d", &n);
et = 0;
memset(H, 0, sizeof H);
rep(i, 1, n - 1){
scanf("%d%d%lld", &x, &y, &val);
addedge(x, y, val);
} rep(i, 1, n) scanf("%lld", a + i);
memset(vis, 0, sizeof vis); dfs(1, 0);
rep(i, 1, n) c[i] = a[i] + dist[i], fl[i] = 1; memset(f, 0, sizeof f);
rep(i, 2, n) if (c[i] < c[fa[i]]) f[i] = 1; memset(vis, 0, sizeof vis);
rep(i, 1, n) if (f[i] && vis[i] == 0) work(i); ans = 0;
rep(i, 1, n) ans += fl[i];
printf("%d\n", ans); } return 0; }
ZSTU 4248 KI的目标(dfs)的更多相关文章
- zstu.4191: 无向图找环(dfs树 + 邻接表)
4191: 无向图找环 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 117 Solved: 34 Description 给你一副无向图,每条边有 ...
- 数位DP入门题
站点一览: hdu 2089"不要62" hdu 4734"F(X)" poj 3252"Round Numbers" hdu 3709&q ...
- P4160 [SCOI2009]生日快乐
题目描述 windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕. 现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕. win ...
- HDU 1242 dFS 找目标最短路
//多个起点,要最短得目标,不妨倒过来从目标出发,去找最近的点更新!!!!!!递归时思路要清楚 #include<iostream> #include<cstring> usi ...
- Leetcode之深度优先搜索(DFS)专题-494. 目标和(Target Sum)
Leetcode之深度优先搜索(DFS)专题-494. 目标和(Target Sum) 深度优先搜索的解题详细介绍,点击 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- BFS/DFS算法介绍与实现(转)
广度优先搜索(Breadth-First-Search)和深度优先搜索(Deep-First-Search)是搜索策略中最经常用到的两种方法,特别常用于图的搜索.其中有很多的算法都用到了这两种思想,比 ...
- *HDU1455 DFS剪枝
Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDFS读写数据块--${dfs.data.dir}选择策略
最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...
随机推荐
- jichu
第 题 请编写函数 fun,其功能时:计算并输出当 x<0.97 时下列多项式的值,直到| sn-s(n-)|<0.000001 为止. Sn=+.5x+)/!x()+…+)()…..() ...
- 笔记-HTTP代理
笔记-HTTP代理 1. 基本原理 所谓代理,一个重要的目的是身份伪装,让被访问端无法正辨识访问者的身份. 那么下一个问题是服务器从哪些信息上来识别访问端的身份. 以php http服务器为 ...
- 【Jump Game II 】cpp
题目: Given an array of non-negative integers, you are initially positioned at the first index of the ...
- 【Part1】用JS写一个Blog(node + vue + mongoDB)
学习JS也有一段时间了,准备试着写一个博客项目,前后端分离开发,后端用node只提供数据接口,前端用vue-cli脚手架搭建,路由也由前端控制,数据异步交互用vue的一个插件vue-resourse来 ...
- [ecmagnet][python基础]有关git那些事
#1 git教程 # 注册git服务器用户,权限-- 注意这个和客户端用户不是一样 # 客户端(linux)提交代码到本地仓库(简单版,了解原理) a.安装git sudo apt-get insta ...
- OgnlValueStack 源码
/* * Copyright 2002-2006,2009 The Apache Software Foundation. * * Licensed under the Apache License, ...
- ansible中playbook使用
palybook使用 ####yaml语法ansible中使用的yaml基础元素:变量Inventory条件测试迭代 playbook的组成结构InventoryModulesAd Hoc Comma ...
- 【bzoj2161】布娃娃 权值线段树
题目描述 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二代考神,这和小时候培养的良好素质是分不开的.雨荨的妈妈也为有这么一个懂事的女儿感到高兴.一 ...
- 使用SS5搭建linux下的sock5代理服务器
http://sourceforge.net/projects/ss5/下载最新源码 apt-get install libpam0g-dev apt-get install libldap2-dev ...
- HDU 5322 Hope ——NTT 分治 递推
发现可以推出递推式.(并不会) 然后化简一下,稍有常识的人都能看出这是一个NTT+分治的情况. 然而还有更巧妙的方法,直接化简一下递推就可以了. 太过巧妙,此处不表,建议大家找到那篇博客. 自行抄写 ...