BZOJ3697【点分治】
来源:互联网 发布:苏州二手房成交数据 编辑:程序博客网 时间:2024/05/21 09:30
/* I will wait for you */#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<ctime>#include<algorithm>#include<iostream>#include<fstream>#include<vector>#include<queue>#include<deque>#include<set>#include<map>#include<string>typedef long long LL;typedef unsigned long long ULL;using namespace std;const int maxn=200010;const int maxm=1010;const int maxs=26;const int INF=1<<29;const int P=1000000007;const double error=1e-9;struct edge{ int v,w,next; }e[maxn];int head[maxn],t[maxn],size[maxn],mx[maxn],del[maxn],dis[maxn],deep[maxn];int n,sum,root,mxdeep,cnt=0;LL f[maxn][2],g[maxn][2],ans;void add(int u,int v,int w){e[cnt]=(edge){v,w,head[u]};head[u]=cnt++;}void findroot(int u,int p){size[u]=1;mx[u]=0;for(int i=head[u];i!=-1;i=e[i].next){int v=e[i].v;if(!del[v]&&v!=p){findroot(v,u);size[u]+=size[v];mx[u]=max(mx[u],size[v]);}}mx[u]=max(mx[u],sum-size[u]);if(mx[u]<mx[root]) root=u;}void dfs(int u,int p){g[dis[u]][t[dis[u]]>0]++;mxdeep=max(mxdeep,deep[u]);t[dis[u]]++;for(int i=head[u];i!=-1;i=e[i].next){int v=e[i].v;if(!del[v]&&v!=p){dis[v]=dis[u]+e[i].w;deep[v]=deep[u]+1;dfs(v,u);}}t[dis[u]]--;}void solve(int u){del[u]=1;f[n][0]=1;int mxsum=0;for(int i=head[u];i!=-1;i=e[i].next){int v=e[i].v;if(!del[v]){deep[v]=1;dis[v]=n+e[i].w;mxdeep=0;dfs(v,u);mxsum=max(mxsum,mxdeep);ans+=(f[n][0]-1)*g[n][0];for(int i=-mxdeep;i<=mxdeep;i++)ans+=f[n+i][0]*g[n-i][1]+f[n+i][1]*g[n-i][0]+f[n+i][1]*g[n-i][1];for(int i=-mxdeep;i<=mxdeep;i++)f[n+i][0]+=g[n+i][0],f[n+i][1]+=g[n+i][1],g[n+i][0]=g[n+i][1]=0;}}for(int i=-mxsum;i<=mxsum;i++) f[n+i][0]=f[n+i][1]=0;for(int i=head[u];i!=-1;i=e[i].next){int v=e[i].v;if(!del[v]){root=0;sum=size[v];findroot(v,0);solve(root);}}}int main(){scanf("%d",&n);memset(head,-1,sizeof(head));for(int i=1;i<n;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);w=w?1:-1;add(u,v,w);add(v,u,w);}sum=mx[0]=n;findroot(1,0);solve(root);printf("%lld\n",ans);return 0;}
0 0
- BZOJ3697【点分治】
- bzoj3697(点分治)
- BZOJ3697 点分治
- 【BZOJ3697】采药人的路径【点分治】
- 【bzoj3697】【采药人的路径】【点分治】
- 【bzoj3697】采药人的路径 点分治
- bzoj3697 采药人的路径 点分治
- 【bzoj3697】【坑】采药人的路径 点分治
- Bzoj3697:采药人的路径:树的点分治
- [BZOJ3697]采药人的路径(点分治)
- [BZOJ3697][[FJ2014集训]采药人的路径][点分治]
- [BZOJ3697]采药人的路径(点分治)
- bzoj3697 采药人的路径 (点分治)
- [BZOJ3697]采药人的路径(点分治)
- BZOJ3697
- 树分治-点分治
- 点分治
- 点分治
- 循环打开头文件
- JAVA学习笔记(四) - 循环语句
- Sicily 1064. Subway Tree Systems
- 表单内标题对齐
- Sicily 1172. Queens, Knights and Pawns
- BZOJ3697【点分治】
- NFV与SDN
- Sicily 1025. Parallel Challenge B
- 241个jquery插件—jquery插件大全
- Sicily 1187. Laserbox
- MySQL 利用xtrabackup进行增量备份详细过程汇总
- java 2d array-1
- Java String类知识总结并结合leetcode
- Sicily 1022. Poor contestant Prob