codeforces 813C The Tag Game dfs && 路径长度
来源:互联网 发布:团队优化的原则包括 编辑:程序博客网 时间:2024/06/01 08:30
原题链接:
codeforces 813C
大意:
A B 在一棵树上,每人轮流移动,B 先走,直到 A 追上 B 为止。
A在 1,B在 x 处。
求最少操作数。每次操作为站立不动或是移动到相邻点。
思路:
问题转换为 A的路径*2,只要满足 A 比 B 先到即可。
所以从 1 和 x 分别跑两次最长路径,储存叶子节点的路径,求 d1[i] >d2[i] 的最大d1[i] 即可。
代码实现:
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define mem(s,t) memset(s,t,sizeof(s))#define D(v) cout<<#v<<" "<<v<<endl#define inf 0x3f3f3f3f#define pb push_back#define pii pair<int,int>//#define LOCALconst int MAXN =2e5+10;int n,x;vector<int> a[MAXN];int ret1[MAXN],ret2[MAXN];void dfs(int x,int y,int path,int *ret){ for(int i=0;i<a[x].size();i++){ if(y==a[x][i]) continue; dfs(a[x][i],x,path+1,ret); } ret[x]=path;}int main() { scanf("%d%d",&n,&x); for(int i=1;i<=n-1;i++){ int u,v; scanf("%d%d",&u,&v); a[u].pb(v); a[v].pb(u); } dfs(1,0,0,ret1); dfs(x,0,0,ret2); int ans=0; for(int i=1;i<=n;i++){ if(ret1[i]>ret2[i]) ans=max(ans,2*ret1[i]); } printf("%d\n",ans); return 0;}
阅读全文
0 0
- codeforces 813C The Tag Game dfs && 路径长度
- codeforces 813C The Tag Game dfs
- Codeforces 813C The Tag Game【思维+Dfs】
- Educational Codeforces Round 22 C. The Tag Game dfs
- C. The Tag Game【dfs】
- codeforces 813C The Tag Game
- codeforces 813C. The Tag Game
- Codeforces 813 C The Tag Game
- Codeforces 813C The Tag Game 题解
- codeforces 813C The Tag Game
- codeforces 813C The Tag Game
- Codeforces 813C The Tag Game
- The Tag Game CodeForces
- The Tag Game(CodeForces
- C. The Tag Game
- Educational Codeforces Round 22-C. The Tag Game-搜索,贪心
- Educational Codeforces Round 22 C. The Tag Game(思维)
- Educational Codeforces Round 22 C. The Tag Game 搜索
- hdu 3037 Skiing
- mac 安装 brew Homebrew
- HDU-Just do it
- 数据结构之查找算法总结
- 微信第三方平台开发经验总结(七):发送客服消息
- codeforces 813C The Tag Game dfs && 路径长度
- java 创造线程 Thread 的三种方法
- Spring集成RabbitMQ-使用RabbitMQ更方便
- window.onerror()的用法(作用:报告错误所在的行号)
- Angular2-管道Pipe
- %matplotlib inline UnknownBackend: No event loop integration for 'inline'.
- 测试之路
- c语言fseek函数的总结
- Effective Modern C++ Item 5