POJ 1741 Tree (树上点分治)(楼教主男人八题之一)
来源:互联网 发布:手机桌面清理软件 编辑:程序博客网 时间:2024/05/21 22:21
题目地址:POJ 1741
树分治第一发!
树分治详情请看漆子超的国家集训队论文,论文传送门
树分治裸题。
代码如下:
#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>#include <time.h>using namespace std;#define LL __int64#define pi acos(-1.0)//#pragma comment(linker, "/STACK:1024000000")const int mod=1e9+7;const int INF=0x3f3f3f3f;const double eqs=1e-9;const int MAXN=10000+10;int head[MAXN], cnt, ans, min1, root, tot;int siz[MAXN], dep[MAXN], vis[MAXN], d[MAXN];int n, k;struct node{ int v, w, next;}edge[MAXN<<1];void add(int u, int v, int w){ edge[cnt].v=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt++;}void init(){ memset(head,-1,sizeof(head)); cnt=ans=0; memset(vis,0,sizeof(vis));}void getroot(int u, int fa, int s){ int i, max1=0; siz[u]=1; for(i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; if(v==fa||vis[v]) continue ; getroot(v,u,s); siz[u]+=siz[v]; max1=max(max1,siz[v]); } max1=max(max1,s-siz[u]); if(min1>max1){ min1=max1; root=u; }}void getdep(int u, int fa){ d[tot++]=dep[u];siz[u]=1; for(int i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; if(v==fa||vis[v]) continue ; dep[v]=dep[u]+edge[i].w; getdep(v,u); siz[u]+=siz[v]; }}int Cal(int u, int len){ int l, r, res=0; tot=0; dep[u]=len; getdep(u,-1); sort(d,d+tot); r=tot-1; for(l=0;l<tot;l++){ while(d[r]+d[l]>k) r--; if(r<=l) break; res+=r-l; } return res;}void work(int u){ ans+=Cal(u,0); vis[u]=1; for(int i=head[u];i!=-1;i=edge[i].next){ int v=edge[i].v; if(vis[v]) continue ; ans-=Cal(v,edge[i].w); min1=INF; getroot(v,-1,siz[v]); work(root); }}int main(){ int u, v, w, i; while(scanf("%d%d",&n,&k)!=EOF&&n+k){ init(); for(i=1;i<n;i++){ scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w); } min1=INF; getroot(1,-1,n); work(root); printf("%d\n",ans); } return 0;}
1 0
- POJ 1741 Tree (树上点分治)(楼教主男人八题之一)
- poj 1741 楼教主男人八题之一:树分治
- 楼教主男人八题--POJ1741--点分治
- POJ 1741(男人八题-Tree-点分治)
- 【POJ 1741】Tree (树上点分治)
- POJ 1741 Tree(树的点分治、树形dp、男人八题)
- 楼教主男人八题 POJ 1741(树分治(我自然是看题解搞懂的))
- POJ 1741 Tree(树分治|ltc男人八题)
- (男人八题之一)树形dp poj 1741 Tree
- POJ 1741 Tree(树上的点分治)
- POJ 1741 Tree [树上点分治]
- [poj 1741] Tree 树上点分治
- POJ-1741 TREE 点分治 树上问题
- POJ:1741 Tree(男人八题-树分治)
- POJ 1739 Tony's Tour 楼教主的男人八题之一
- POJ 1743 Musical Theme 后缀数组 楼教主男人八题之一
- PKU1743 Musical Theme 楼教主男人八题之一
- poj1740-楼教主所谓的男人八题之一
- 更改Android应用程序的图标
- 事件委托
- 大神写了个程序玩玩,就抓取了400 亿条秀恩爱和吐槽(多图)
- 提交代码时应注意什么,codereview是很重要的
- 图解MBR分区无损转换GPT分区+UEFI引导安装WIN8.1
- POJ 1741 Tree (树上点分治)(楼教主男人八题之一)
- 【操作系统】文件管理
- Maven详解之仓库------本地仓库、远程仓库
- Android之activity总结
- 程序国际化的编码问题
- matlab纵波动画
- 贝塞尔曲线 (Bézier curve) 理论及绘制方法
- mysql查询优化(一)
- 剑指offer 例题