POJ 1987 BZOJ 3365 USACO 2004 Feb Distance Statistics 路程统计 点分治
2016-04-03 18:11
791 查看
和POJ 1714一样。。
http://blog.csdn.net/huanghongxun/article/details/50967578
一个整数K(1≤K≤109),希望你输出有多少对农场之间的距离是不超过K的.
Sample Output
1-4,距离为3
4-7,距离为2
1-7,距离为5
3-5,距离为7
3-6,距离为9
http://blog.csdn.net/huanghongxun/article/details/50967578
#include <cstdio> #include <algorithm> #include <cstring> const int N = 40005, M = N * 2; #define adj(i,j) for(int i=h[j];i;i=p[i])if(v[i]!=fa&&!vis[v[i]]) using namespace std; int h , p[M], w[M], v[M], cnt = 0; int n, k, vis , ans, rt, c; void add(int a, int b, int c) { v[++cnt] = b; w[cnt] = c; p[cnt] = h[a]; h[a] = cnt; } int mx , sz , mi, dis ; void dfssize(int x, int fa) { sz[x] = 1; mx[x] = 0; adj(i,x) { dfssize(v[i], x); sz[x] += sz[v[i]]; if (sz[v[i]] > mx[x]) mx[x] = sz[v[i]]; } } void dfsrt(int r, int x, int fa) { if (sz[r] - sz[x] > mx[x]) mx[x] = sz[r] - sz[x]; if (mx[x] < mi) mi = mx[x], rt = x; adj(i,x) dfsrt(r, v[i], x); } void dfsdis(int x, int d, int fa) { dis[c++] = d; adj(i,x) dfsdis(v[i], d + w[i], x); } int calc(int x, int d) { int ans = 0; c = 0; dfsdis(x, d, 0); sort(dis, dis + c); for (int i = 0, j = c - 1; i < j; ++i) { for (; dis[i] + dis[j] > k && i < j; --j); ans += j - i; } return ans; } void dfs(int x) { int fa = 0; mi = n; dfssize(x, fa); dfsrt(x, x, fa); ans += calc(rt, 0); vis[rt] = 1; adj(i, rt) { ans -= calc(v[i], w[i]); dfs(v[i]); } } int main() { int u, v, w, i, m; char redundancy[8]; while(scanf("%d%d", &n, &m) != EOF && (n || k)) { memset(vis, 0, sizeof vis); memset(h, 0, sizeof h); cnt = ans = 0; for (i = 0; i < m; i++) { scanf("%d%d%d%s", &u, &v, &w, redundancy); add(u, v, w); add(v, u, w); } scanf("%d", &k); dfs(1); printf("%d\n", ans); } return 0; }
3365: [Usaco2004 Feb]Distance Statistics 路程统计
Description
在得知了自己农场的完整地图后(地图形式如前三题所述),约翰又有了新的问题.他提供
一个整数K(1≤K≤109),希望你输出有多少对农场之间的距离是不超过K的.
Input
第1到I+M行:与前三题相同; 第M+2行:一个整数K.
Output
农场之间的距离不超过K的对数.
Sample Input
7 6 1 6 13 E 6 3 9 E 3 5 7 S 4 1 3 N 2 4 20 W 4 7 2 S 10
Sample Output
5
Hint
有五对道路之间的距离小于101-4,距离为3
4-7,距离为2
1-7,距离为5
3-5,距离为7
3-6,距离为9
相关文章推荐
- 在NodeJS中玩转Protocol Buffer
- jQuery代码优化:事件委托篇
- jquery-ajax-php(内容点赞并进行cookie限制实现)
- 【javascript 】组合式继承
- JavaScript之jQuery-8 jQuery 使用插件(zTree树插件、jQuery UI插件)
- 用Beautiful Soup解析html源码
- jQuery实现图片轮播且鼠标可控制显示,使用animate函数
- 简单理解css中的垂直居中和水平居中,即vertical-align和text-align属性
- JavaScript(二)-- 面向对象
- 使用百度静态资源库bootstrap字体出现问题
- 【前端】在Gulp中使用Babel
- 深入理解letter-spacing和word-spacing2
- JavaScript之jQuery-7 jQuery 使用插件(使用插件、日历插件、表单验证插件)
- HTML学习笔记(十四)URL
- 状态栏文字从右弹出_JS特效代码
- 状态栏文字从右到左移动条_JS特效代码
- 状态栏文字从右到左移动_js特效代码
- 状态栏文字来回出现_JS特效代码
- HTML学习笔记(十三)字符实体
- 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload