博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷4577 & LOJ2521:[FJOI2018]领导集团问题——题解
阅读量:6203 次
发布时间:2019-06-21

本文共 1692 字,大约阅读时间需要 5 分钟。

参考:

自己再说下另一种理解方法吧。

我们设f[i][j]为i的子树下找到的点集最小值为j的大小。

但不是很好统计,所以我们开f[i][j]表示j~INF的和即为原来的含义。

则我们合并其子树的时候,考虑加入i的w[i]时,其答案f[i][w[i]]还是没有问题的,但是对于比w[i]小的值就全大1了,所以我们找到第一个比w[i]小的w,将其--,之后统计即可。

(当然如果没有比其小的w,我们当然就不需要减啦!)

复杂度O(nlog^2n)只要评测机好点就能过。

#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N=2e5+5;#define fi first#define se secondinline int read(){ int X=0,w=0;char ch=0; while(!isdigit(ch)){w|=ch=='-';ch=getchar();} while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X;}struct node{ int to,nxt;}e[N];int n,m,cnt,head[N],w[N],b[N];map
f[N];map
::iterator it;inline void add(int u,int v){ e[++cnt].to=v;e[cnt].nxt=head[u];head[u]=cnt;}inline void merge(int u,int v){ if(f[u].size()
fi]+=it->se; } f[v].clear();}void dfs(int u){ for(int i=head[u];i;i=e[i].nxt){ int v=e[i].to; dfs(v); merge(u,v); } it=f[u].begin(); if(it->fi>=w[u])return; it=f[u].lower_bound(w[u]);it--; if(it->se==1)f[u].erase(it); else it->se-=1;}inline void LSH(){ sort(b+1,b+m+1); m=unique(b+1,b+m+1)-b-1; for(int i=1;i<=n;i++) w[i]=lower_bound(b+1,b+m+1,w[i])-b;}int main(){ n=read(); for(int i=1;i<=n;i++)w[i]=b[++m]=read(); LSH(); for(int i=1;i<=n;i++)f[i][w[i]]=1; for(int v=2;v<=n;v++){ int u=read();add(u,v); } dfs(1); int ans=0; for(it=f[1].begin();it!=f[1].end();it++)ans+=it->se; printf("%d\n",ans); return 0;}

+++++++++++++++++++++++++++++++++++++++++++

 +本文作者:luyouqi233。               +

 +欢迎访问我的博客:+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/9146396.html

你可能感兴趣的文章
Python数据结构之四——set(集合)
查看>>
比特币,以太坊......区块链技术真的被认同了吗?
查看>>
WebLogic调用WebService提示Failed to localize、Failed to create WsdlDefinitionFeature
查看>>
020-Spring Boot 监控和度量
查看>>
JAVA中动态编译的简单使用
查看>>
java基础-BigDecimal类常用方法介绍
查看>>
[转]kafka介绍
查看>>
Google Guava新手教程
查看>>
tensorflow 实现逻辑回归——原以为TensorFlow不擅长做线性回归或者逻辑回归,原来是这么简单哇!...
查看>>
Spark 键值对RDD操作
查看>>
004-docker常用命令[二]-容器操作ps,top,attach,export
查看>>
Nancy简单实战之NancyMusicStore(四):实现购物车
查看>>
WIN10系统 截图或者某些程序时屏幕会自动放大怎么办
查看>>
[SQL] 请教一下 count里面有case when 一般情况下啥时候用
查看>>
山羊与汽车游戏的实验算法
查看>>
docker保存日志文件到本地
查看>>
【转载】springboot:如何优雅的使用mybatis
查看>>
java实现无序数组结构
查看>>
32位JDK和64位JDK
查看>>
IntelliJ IDEA 运行 Maven 项目
查看>>