hdu 4607 Park Visit
来源:互联网 发布:js全景图 编辑:程序博客网 时间:2024/04/28 00:43
求出树的直径d。当k<=d的时候,显然直接在直径上走就行了,当k>d的时候,便是直径d的长度 加上 多出来的点数*2.
#include<iostream>#include<algorithm>#include<vector>#include<cstdio>#include<cstring>#define FF(i, a ,b) for(int i=a; i<b; i++)#define FD(i, a ,b) for(int i=a; i>b; i--)#define REP(i, n) for(int i=0; i<n; i++)#define LL long long#define CLR(a, b) memset(a, b, sizeof(a))#define PB push_backusing namespace std;const int maxn = 111111;int n, m, dist, k, end;vector<int> G[maxn];void dfs(int x, int fa, int d){ int nc = G[x].size(); if(nc == 1) { if(d > dist) { dist = d; end = x; } } REP(i, nc) { int v = G[x][i]; if(v != fa) { dfs(v, x, d+1); } }}int main(){ int T, a, b; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &m); REP(i, n+1) G[i].clear(); FF(i, 1, n) { scanf("%d%d", &a, &b); G[a].PB(b); G[b].PB(a); } dist = 0; dfs(1, -1, 0); dfs(end, -1, 0); dist++; while(m--) { scanf("%d", &k); if(k <= dist) printf("%d\n", k-1); else printf("%d\n", dist - 1 + (k-dist)*2); } } return 0;}
- hdu 4607 Park Visit
- hdu 4607 Park Visit
- hdu - 4607 - Park Visit
- hdu 4607 Park Visit
- hdu-4607-Park Visit
- HDU 4607 Park Visit
- HDU 4607 Park Visit
- HDU 4607 Park Visit
- hdu 4607 Park Visit
- hdu 4607 Park Visit
- hdu 4607 Park Visit
- HDU - 4607 Park Visit
- HDU 4607 Park Visit
- HDU 4607 Park Visit
- hdu 4607 Park Visit dfs
- hdu 4607 Park Visit (DFS)
- hdu 4607 Park Visit 贪心
- HDU 4607 Park Visit 解题报告
- 2013-07-25(周四)
- Android服务之PackageManagerService启动源码分析
- Animation 中的事务 - - CATransaction
- wamp解决方案
- Android实战技巧:如何在ScrollView中嵌套ListView
- hdu 4607 Park Visit
- Linux开机自动启动程序
- AjaxControlToolkit的使用
- SharePoint定制开发个性皮肤
- 《学习Qt之路2》笔记:QT布局管理器
- linux学习笔记之--操作系统概论
- Unity3d插件 Master Audio v2.3.1
- IE 11:请不要再叫我IE
- Ubuntu server 命令备忘