hdu5877(dfs序,树状数组,2016年大连站网络赛1010)
来源:互联网 发布:软件安全检测平台 编辑:程序博客网 时间:2024/06/05 16:07
题目链接
题目大意:
给一棵有根树,让你求这样的(u,v)满足
1)u是v的祖先
2)a[u] * a[v] <= k 两个条件。
求pair的数量。
题目解析:
首先我们可以很快的yy出要用dfs序,把树展成链,因为这是节点与子树中的节点的关系的问题,再想出对于一个节点u,那么只要找到
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;int n;long long k;const int maxn = 1e5 + 5;int a[maxn];int deg[maxn];int root;vector<int> G[maxn];int dfs_clock;int c[maxn << 1];int pre[maxn],suf[maxn];void init(int n){ for(int i = 1;i <= n;i++) G[i].clear(); dfs_clock = 0; for(int i = 1;i <= n;i++) deg[i] = 0; memset(c,0,sizeof(c));}void add(int x){ int up = maxn << 1; while(x < up){ c[x]++; x += x & -x; }}int sum(int x){ int ret = 0; while(x > 0){ ret += c[x]; x -= x & -x; } return ret;}void dfs(int u,int fa){ pre[u] = ++dfs_clock; for(int i = 0;i < G[u].size();i++){ int v = G[u][i]; if(v == fa) continue; dfs(v,u); } suf[u] = ++dfs_clock;}struct st{ int id,val; bool operator < (const st & rhs) const{ return val < rhs.val; }}s[maxn];typedef long long ll;int main(int argc, const char * argv[]) { int T; cin >> T; while(T--){ scanf("%d",&n); cin >> k; init(n); for(int i = 1;i <= n;i++) scanf("%d",&a[i]),s[i].id = i,s[i].val = a[i]; for(int i = 1;i < n;i++){ int u,v; scanf("%d%d",&u,&v); deg[v]++; G[u].push_back(v); G[v].push_back(u); } for(int i = 1;i <= n;i++){ if(deg[i] == 0){ root = i; break; } } dfs(root,-1); sort(s + 1,s + 1 + n); int front = 1; ll ans = 0; for(int i = n;i >= 1;i--){ ll tmp = k / (ll) s[i].val; while(s[front].val <= tmp && front <= n){ add(pre[s[front].id]); add(suf[s[front].id]); front++; } ans += sum(suf[s[i].id] - 1) - sum(pre[s[i].id]); } cout << ans / 2 << endl; } return 0;}
0 0
- hdu5877(dfs序,树状数组,2016年大连站网络赛1010)
- hdu5877 dfs序+树状数组
- 2016 大连网络赛 HDU 5877 Weak Pair (DFS + 树状数组 + 离散化)
- hdu5877(离散化树状数组&dfs回溯)
- hdu5877 Weak Pair 【树状数组+dfs】
- hdu5877 Weak Pair(DFS+树状数组)
- HDU5877 Weak Pair(树状数组+dfs)
- 大连网赛 1010 HDU5877 离散化+树状数组
- 2016年ACM/ICPC 亚洲区域赛 大连站 1011 Weak Pair(现HDU 5877) 树状数组离散化+dfs
- HDU 5877 Weak Pair(离散化+dfs+树状数组) 大连区域网络赛
- HDU-5877-Weak Pair【树状数组】【离散化】【DFS】【2016大连网络】【好题】
- hdu5877 Weak Pair(离散化+树状数组+dfs)
- HDU5877 Weak Pair dfs + 线段树/树状数组 + 离散化
- 2016 大连网络赛 hdu 5869 Different GCD Subarray Query(gcd+树状数组)★ ★
- 【2016-大连赛区网络赛-B】树状数组(Different GCD Subarray Query,hdu 5869)
- hdu 5877 - Weak Pair (2016大连网络赛) 离散化 + 树状数组
- hdu5877 Weak Pair(树状数组+map)
- dfs序+树状数组
- 中文转拼音类
- mysql_在tomcat中的配置
- 蓝桥杯 奇怪的比赛-低碳生活大奖赛(DFS水)
- Material-Animations讲解笔记
- java方法
- hdu5877(dfs序,树状数组,2016年大连站网络赛1010)
- 策略模式+工厂方法 实现多分支操作(代替多个if else)
- PAT 1068. Find More Coins (30)(背包问题,动态规划)
- POJ 1703 Find them, Catch them
- 系统定时任务
- HTML——表单
- Java开发中的23种设计模式详解
- hdu 5874 构造
- Combination Sum_Leetcode_#39