【HDOJ5977】Garden of Eden(点分治)
题意:给定一棵n个点的树,每个节点上有一种颜色a[i],一共有k种颜色,问包含所有颜色的路径条数
n<=5e4,k<=10
思路:点分治求方案数
集合并卷积的时候暴力枚举状态即可O(n^logn*2^k)
75e的复杂度 只跑了1.7s 我也是醉了
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
typedef long long ll;
using namespace std;
#define N 110000
#define oo 10000000
#define MOD 1000000007 ll ans;
int head[N],vet[N],nxt[N],a[N],flag[N],son[N],f[N],s[],dep[N],d[N],
n,k,all,tot,sum,root; void add(int a,int b)
{
nxt[++tot]=head[a];
vet[tot]=b;
head[a]=tot;
} void getroot(int u,int fa)
{
son[u]=; f[u]=;
int e=head[u];
while(e)
{
int v=vet[e];
if(v!=fa&&!flag[v])
{
getroot(v,u);
son[u]+=son[v];
f[u]=max(f[u],son[v]);
}
e=nxt[e];
}
f[u]=max(f[u],sum-f[u]);
if(f[u]<f[root]) root=u;
} void getdep(int u,int fa)
{
dep[++dep[]]=d[u];
int e=head[u];
while(e)
{
int v=vet[e];
if(v!=fa&&!flag[v])
{
d[v]=d[u]|(<<a[v]);
getdep(v,u);
}
e=nxt[e];
}
} ll calc(int u,int now)
{
d[u]=now; dep[]=;
getdep(u,);
memset(s,,sizeof(s));
ll ans=;
for(int i=;i<=dep[];i++)
{
for(int j=;j<=all;j++)
if((dep[i]|j)==all) ans+=s[j];
s[dep[i]]++;
}
return ans;
} void solve(int u)
{
ans+=calc(u,<<a[u]);
flag[u]=;
int e=head[u];
while(e)
{
int v=vet[e];
if(!flag[v])
{
ans-=calc(v,(<<a[u])|(<<a[v]));
sum=son[v];
root=;
getroot(v,root);
solve(root);
}
e=nxt[e];
}
} int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
all=(<<k)-;
for(int i=;i<=n;i++) head[i]=flag[i]=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]--;
}
tot=;
for(int i=;i<=n-;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
if(k==)
{
ll ans=n*n;
printf("%I64d\n",ans);
continue;
}
sum=n; f[]=oo; ans=; root=;
getroot(,);
solve(root);
ans*=;
printf("%I64d\n",ans);
}
return ;
}
【HDOJ5977】Garden of Eden(点分治)的更多相关文章
- hdu-5977 Garden of Eden(树分治)
题目链接: Garden of Eden Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- HDU 5977 Garden of Eden(点分治求点对路径颜色数为K)
Problem Description When God made the first man, he put him on a beautiful garden, the Garden of Ede ...
- (模板)hdoj5977 Garden of Eden(点分治)
题目链接:https://vjudge.net/problem/HDU-5977 题意:给一颗树,每个结点上有一个权值a[i],a[i]<=10,求有多少条路径满足这条路径上所有权值的结点都出现 ...
- HDU 5977 Garden of Eden (树分治+状态压缩)
题意:给一棵节点数为n,节点种类为k的无根树,问其中有多少种不同的简单路径,可以满足路径上经过所有k种类型的点? 析:对于路径,就是两类,第一种情况,就是跨过根结点,第二种是不跨过根结点,分别讨论就好 ...
- HDU-5977 - Garden of Eden 点分治
HDU - 5977 题意: 给定一颗树,问树上有多少节点对,节点对间包括了所有K种苹果. 思路: 点分治,对于每个节点记录从根节点到这个节点包含的所有情况,类似状压,因为K<=10.然后处理每 ...
- HDU5977 Garden of Eden(树的点分治)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5977 Description When God made the first man, he ...
- Garden of Eden
Garden of Eden Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- uva10001 Garden of Eden
Cellular automata are mathematical idealizations of physical systems in which both space and time ar ...
- hdu 5977 Garden of Eden(点分治+状压)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5977 题解:这题一看就知道是状压dp然后看了一下很像是点分治(有点明显)然后就是简单的点分治+状压dp ...
随机推荐
- PHP namespace、abstract、interface、trait使用介绍
小菜鸟一枚,一直搞不懂 namespace.abstract.interface.trait 这些关系,就抽出几天时间研究,做个总结,不足之处希望大家指正交流. namespace 命名空间 介绍:顾 ...
- shell数组脚本
#!/bin/bash array=( ) ;i<${#array[*]};i++)) do echo ${array[i]} done 脚本2 #!/bin/bash array=( ) fo ...
- matplotlib(二)——matplotlib控制坐标轴第一个刻度到原点距离
一.问题描述 具体问题是: 用python库matplotlib进行数据的图表展示: 横坐标是自定义统计值: 保存矢量图(svg),保存后发现横坐的第一个点离坐标原点距离较大,导致图形离y轴较远,让画 ...
- 29.VUE学习之--键盘事件.键盘修饰符的实例讲解
键盘事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- Python知识点进阶——细节问题
int()强制转换浮点数 在int()的强制转换浮点数时候,不管是正数还是负数,只取整数部分. 注意:这里不是向上或者向下取整,也不是四舍五入. 无限递归 递归是为了将问题简化为更小规模的同类型问题, ...
- stm32基本定时器timer6的原理与使用
/********************基本定时器 TIM 参数定义,只限 TIM6.7************/ /* 一.定时器分类 STM32F1 系列中,除了互联型的产品,共有 8 个定时器 ...
- Java模拟音乐播放器 暂停与重新播放——线程如何控制另外一个线程的状态
package com.example.Thread; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEve ...
- 批处理文件执行cmd命令
@echo offstart "wumin" "C:\Windows\System32\cmd.exe" osk taskkill /f /im cmd.exe ...
- 数据预处理之独热编码(One-Hot Encoding)
问题的由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑以下三个特征: ["male","female"] ["from ...
- Eclipse配置Maven工具
1.Maven安装,下载Maven二进行制文件: http://maven.apache.org/download.cgi 下载后解压,然后设置maven的bin目录到系统环境变量Path中,在cmd ...