Gym 101147J Whistle's New Car(dfs)
https://vjudge.net/problem/Gym-101147J
题意:
有n个城市,每个城市有一个权值,表示在这个城市的加油站可以加多少油。
现在要计算每个城市i,有多少个城市j可以到达它:
① j 是 i 的子树。
② 在城市 j 加满Xj的油后不再加油能到达 i 城市。
思路:
我们从根结点出发,dfs整棵树,在dfs的过程中,我们维护一个道路长度的和sum[],sum[j]就是1到第j个城市的路径之和。
假如我们现在dfs到了第j个城市v,此时1~j的路径之和就是sum[j],然后sum[j]-x[v]就是从v城市出发所能到达的最远距离。
int pos=lower_bound(sum,sum+ret+,sum[ret]-x[v])-sum;
接下来二分查找计算出从v出发在这条路径上所能到达的最远的城市。它所能到达的城市都需要+1。
最后把子节点的个数加到父节点上即可。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
typedef long long LL;
typedef pair<int,LL> pll;
const int maxn=+; int n;
LL x[maxn];
int vis[maxn];
LL sum[maxn];
int num[maxn];
int cnt[maxn];
int ret;
vector<pll> G[maxn]; void dfs(int u)
{
vis[u]=;
for(int i=;i<G[u].size();i++)
{
int v=G[u][i].first;
int w=G[u][i].second;
if(vis[v]) continue;
sum[ret]=sum[ret-]+w;
num[ret]=v; //路径上第ret城市为v
int pos=lower_bound(sum,sum+ret+,sum[ret]-x[v])-sum;//v出发能到达的最远的城市
if(pos<ret)//如果能到达父结点城市
{
cnt[u]++; //父节点城市数量+1
cnt[num[pos-]]--; //这个一定要减,不然后面子节点的数加到父节点的时候,父节点就多加了
}
ret++;
dfs(v);
ret--;
cnt[u]+=cnt[v];
}
} int main()
{
// freopen("car.in","r",stdin);
//freopen("D:\\input.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++) G[i].clear();
for(int i=;i<=n;i++) scanf("%lld",&x[i]);
for(int i=;i<n;i++)
{
int u,v;
LL d;
scanf("%d%d%lld",&u,&v,&d);
G[u].push_back(make_pair(v,d));
G[v].push_back(make_pair(u,d));
}
memset(vis,,sizeof(vis));
memset(cnt,,sizeof(cnt));
ret=;
sum[]=; //1~路径上第j个城市的距离和
num[]=;
dfs(); //从根结点出发遍历
for(int i=;i<=n;i++)
printf("%d%c",cnt[i],i!=n?' ':'\n');
}
return ;
}
Gym 101147J Whistle's New Car(dfs)的更多相关文章
- LeetCode Subsets II (DFS)
		
题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...
 - LeetCode  Subsets (DFS)
		
题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. class Sol ...
 - HDU 2553 N皇后问题(dfs)
		
N皇后问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 在 ...
 - 深搜(DFS)广搜(BFS)详解
		
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
 - 【算法导论】图的深度优先搜索遍历(DFS)
		
关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...
 - 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
		
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
 - 深度优先搜索(DFS)和广度优先搜索(BFS)
		
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
 - 图的 储存 深度优先(DFS)广度优先(BFS)遍历
		
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
 - 搜索——深度优先搜索(DFS)
		
设想我们现在身处一个巨大的迷宫中,我们只能自己想办法走出去,下面是一种看上去很盲目但实际上会很有效的方法. 以当前所在位置为起点,沿着一条路向前走,当碰到岔道口时,选择其中一个岔路前进.如果选择的这个 ...
 
随机推荐
- ios 添加朦层
			
@interface RootViewController : UIViewController { UIView *view; } -(void)createBackgroundView { vie ...
 - Spring MVC 框架学习
			
一.spirng的简介 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情. ...
 - intelliij jdea灰色文件处理办法
 - poj2176 Folding【区间DP】
			
Folding Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1841 Accepted: 642 Special ...
 - c# 公共方法
			
MyMeans using System; using System.Collections.Generic; using System.Text; using System.Windows.Form ...
 - Lodash 常用API中文参考
			
lodash和underscore都是现在非常流行的两个javascript库,提供了一套函数式编程的实用功能. 而lodash本身最初也是underscore的一个fork,因为和其他(Unders ...
 - 向Docx4j生成的word文档添加图片和布局--第一部分
			
原文标题:Adding images and layout to your Docx4j-generated word documents, part 1 原文链接:http://blog.iprof ...
 - docx4j基本操作
			
最近需要用docx4j来对docx进行一些操作,用到的技术是docx4j,这个技术在国内其实用的不是很多,看了一些博主的文章,有些感悟,做了一些总结,如果有疑问或错误之处欢迎交流. 创建包: Word ...
 - Python爬虫实例(五) requests+flask构建自己的电影库
			
目标任务:使用requests抓取电影网站信息和下载链接保存到数据库中,然后使用flask做数据展示. 爬取的网站在这里 最终效果如下: 主页: 可以进行搜索:输入水形物语 点击标题进入详情页: 爬虫 ...
 - 理解Java异常处理机制的机理
			
重看异常机制的时候觉得抓到了点机理上的精髓,所以来说一下,对初学者应该会有些帮助 JAVA中的异常机制 从机制上由[产生异常][抛出异常][捕捉异常][异常处理]组成 从形式上又分为四种: 运行时 ...