【DP】 cf 486D
来源:互联网 发布:找店面的软件 编辑:程序博客网 时间:2024/06/06 12:30
考虑每个点作为最小的权值点。。。然后dp
#include <bits/stdc++.h>using namespace std;typedef long long LL;const int mod = 1000000007;const int maxn = 2005;const int maxm = 4005;struct Edge{int v;Edge *next;}E[maxm], *H[maxn], *edges;LL f[maxn];int a[maxn];int n, m;void addedges(int u, int v){edges->v = v;edges->next = H[u];H[u] = edges++;}void init(){edges = E;memset(H, 0, sizeof H);}void dfs(int u, int fa, int rt){f[u] = 1;for(Edge *e = H[u]; e; e = e->next) if(e->v != fa) {int v = e->v;if(a[v] < a[rt] || a[v] > a[rt] + m) continue;if(a[v] == a[rt] && v < rt) continue;dfs(v, u, rt);f[u] = f[u] * (f[v] + 1) % mod;}}void work(){scanf("%d%d", &m, &n);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i < n; i++) {int u, v;scanf("%d%d", &u, &v);addedges(u, v);addedges(v, u);}LL ans = 0;for(int i = 1; i <= n; i++) {dfs(i, i, i);ans = (ans + f[i]) % mod;}printf("%I64d\n", ans);}int main(){//freopen("data", "r", stdin);init();work();return 0;}
0 0
- 【DP】 cf 486D
- cf 413D DP
- cf 408D DP
- cf 383D DP
- CF#317D dp
- 数位dp cf 55d
- CF 55D 数位dp
- CF 219D 树形dp
- CF 474D Flowers(dp)
- CF 474D Flowers DP
- CF 148D 概率dp
- CF 55D 数位DP
- CF - 540D 概率dp
- CF 55D(数位DP)
- CF 149D 区间dp
- CF 162-div2 D 数学+dp
- 数位dp CF 55 D. Beautiful numbers
- 数位dp CF 55D Beautiful numbers
- linux基础 --- 权限管理
- 《HBase权威指南》读书笔记10:第十章 集群监控
- 共享内存实现进程间大数据的交换
- Java多线程常问问题(一)
- backgroundworker与Thread区别
- 【DP】 cf 486D
- JS计算字符串所占字节数
- MFC状态栏编程
- VBS脚本教程:文件读取及写入
- HDU 1402 A * B Problem Plus
- 黑马程序员_java多线程的一些总结(二)
- Android启动流程
- 度量快速开发平台中建立公共函数和调用方法介绍
- CentOS下部署web2py服务器