BZOJ 3522 Poi2014 Hotel DFS
来源:互联网 发布:如何开通淘宝客推广 编辑:程序博客网 时间:2024/05/16 09:23
题目大意:给定一棵树,求有多少无序三元组(x,y,z)满足x,y,z互不相等且Dis(x,y)=Dis(y,z)=Dis(x,z)
三个点在树上有两种情况
第一种是三点共链 第二种是存在且仅存在一个中心点满足三个点分别在这个点的三个不同的出边的方向
第一种情况显然无解
第二种情况一定满足三个点到中心点的距离相等
由于n<=5000因此直接枚举中心点然后枚举中心点的每一条出边DFS即可
时间复杂度O(n^2)
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 5050using namespace std;struct abcd{int to,next;}table[M<<1];int head[M],tot;int n;long long ans;int temp[M],f[M],g[M];void Add(int x,int y){table[++tot].to=y;table[tot].next=head[x];head[x]=tot;}void DFS(int x,int from,int dpt){int i;temp[dpt]++;for(i=head[x];i;i=table[i].next)if(table[i].to!=from)DFS(table[i].to,x,dpt+1);}int main(){int i,j,x,y;cin>>n;for(i=1;i<n;i++){scanf("%d%d",&x,&y);Add(x,y);Add(y,x);}for(x=1;x<=n;x++){memset(f,0,sizeof f);memset(g,0,sizeof g);for(i=head[x];i;i=table[i].next){memset(temp,0,sizeof temp);DFS(table[i].to,x,1);for(j=1;j<=n;j++){ans+=(long long)g[j]*temp[j];g[j]+=f[j]*temp[j];f[j]+=temp[j];}}}cout<<ans<<endl;return 0;}
0 0
- BZOJ 3522 Poi2014 Hotel DFS
- bzoj 3522: [Poi2014]Hotel dfs
- BZOJ 3522: [Poi2014]Hotel
- BZOJ 3522 & 4543: [POI2014]Hotel
- 【BZOJ3522】[Poi2014]Hotel【DFS】
- BZOJ3522: [Poi2014]Hotel Dfs
- [树形DP 启发式合并 神题] BZOJ 4543 [POI2014]Hotel加强版 & BZOJ 3522 [Poi2014]Hotel
- 3522: [Poi2014]Hotel
- bzoj3522 [Poi2014]Hotel dfs(DP)
- BZOJ 4543: [POI2014]Hotel加强版 长链剖分
- 3522: [Poi2014]Hotel 树形dp
- bzoj-3522 Hotel
- [BZOJ3522] [Poi2014]Hotel
- 【bzoj3522】[Poi2014]Hotel
- 【bzoj3522】 [Poi2014]Hotel
- [bzoj3522][bzoj4543][POI2014]HOTEL
- BZOJ3522 [Poi2014]Hotel
- [杂题] BZOJ3522: [Poi2014]Hotel
- 类与对象3
- 游泳学习视频
- 从零开始学C++之动态创建对象
- 怎样学好编程?
- 请问SEO助理是做什么的?
- BZOJ 3522 Poi2014 Hotel DFS
- URAL 1197 Lonesome Knight (判断)
- 从零开始学C++之RTTI、dynamic_cast、typeid、类与类之间的关系uml
- TCP为什么需要3次握手与4次挥手
- unity->C#简单的单例模式
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- 怎样成长为一个优秀的 Web 前端开发工程师?
- OpenCV2.4 imread无法打开图片
- 从零开始学C++之异常(二):程序错误、异常(语法、抛出、捕获、传播)、栈展开