牛客多校第九场 The Flee Plan of Groundhog(dfs)

2024-04-16 00:18

本文主要是介绍牛客多校第九场 The Flee Plan of Groundhog(dfs),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:
A在点1,B在点n。A先一直往B走t秒,每秒走1m,一条边1m。
t秒后A可以任意走,且B速度为2m/s。A先走一秒B再走一秒,问最迟多久A可以被B抓住。

思路:
只需要考虑A到一个点的时间和B到一个点的时间,只要在这个点A早于B,那就可以算出A被抓住的时间了。
d 2 [ i ] ∗ 2 < = d 3 [ i ] d2[i] * 2 <= d3[i] d2[i]2<=d3[i]也就是要满足,d2为A离i的距离,d3为B离的距离。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <vector>using namespace std;
typedef long long ll;
const int maxn = 2e5 + 7;
const int mod = 1e9 + 7;int f[maxn],d1[maxn],d2[maxn],d3[maxn];
vector<int>G[maxn];void dfs1(int x,int fa) {for(int i = 0;i < G[x].size();i++) {int v = G[x][i];if(v == fa) continue;f[v] = x;d1[v] = d1[x] + 1;dfs1(v,x);}
}void dfs2(int x,int fa) {for(int i = 0;i < G[x].size();i++) {int v = G[x][i];if(v == fa) continue;d2[v] = d2[x] + 1;dfs2(v,x);}
}void dfs3(int x,int fa) {for(int i = 0;i < G[x].size();i++) {int v = G[x][i];if(v == fa) continue;d3[v] = d3[x] + 1;dfs3(v,x);}
}int main() {int n,t;scanf("%d%d",&n,&t);for(int i = 1;i < n;i++) {int x,y;scanf("%d%d",&x,&y);G[x].push_back(y);G[y].push_back(x);}dfs1(1,-1);if(t >= d1[n]) {printf("0\n");return 0;}int num = d1[n],pos = 1;for(int i = n;i;i = f[i]) {if(d1[i] == t) {pos = i;break;}}dfs2(pos,-1); //求出逃跑点到其他点距离dfs3(n,-1); //求出终点到其他点的距离int ans = 0;for(int i = 1;i <= n;i++) {if(d2[i] * 2 <= d3[i]) {ans = max(ans,(d3[i] + 1) / 2);}}printf("%d\n",ans);return 0;
}

这篇关于牛客多校第九场 The Flee Plan of Groundhog(dfs)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907317

相关文章

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

ural 1149. Sinus Dances dfs

1149. Sinus Dances Time limit: 1.0 second Memory limit: 64 MB Let  An = sin(1–sin(2+sin(3–sin(4+…sin( n))…) Let  Sn = (…( A 1+ n) A 2+ n–1) A 3+…+2) An+1 For given  N print  SN Input One

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

深度优先(DFS)和广度优先(BFS)——算法

深度优先 深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支,当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

培训第九周(部署k8s基础环境)

一、前期系统环境准备 1、关闭防火墙与selinux  [root@k8s-master ~]# systemctl stop firewalld[root@k8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.servi

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

nyoj99(并查集+欧拉路+dfs)

单词拼接 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串。 前一个单词的结尾应该与下一个单词的道字母相同。 如 aloha dog arachnid gopher tiger rat   可以拼接成:aloha.arachnid.dog.gopher.rat.tiger 输入 第一行是一个整