zoukankan      html  css  js  c++  java
  • bzoj4919 大根堆

    考虑二分求序列LIS的过程。

    g[i]表示长度为i的LIS最小以多少结尾。

    对于每个数,二分寻找插入的位置来更新g数组。

    放到树上也是一样,额外加上一个合并儿子的过程。

    发现儿子与儿子直接是互不影响的,可以直接合并。

    用启发式合并set来维护这个g数组,复杂度O(nlogn^2)。

    #include<iostream>
    #include<cctype>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<set> 
    #include<cmath>
    #include<ctime>
    #include<cstdlib>
    #include<algorithm>
    #define N 2200000
    #define L 2000000
    #define eps 1e-7
    #define inf 1e9+7
    #define ll long long
    using namespace std;
    inline int read()
    {
    	char ch=0;
    	int x=0,flag=1;
    	while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}
    	while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    	return x*flag;
    }
    struct edge
    {
    	int to,nxt;
    }e[N*2];
    int num=-1,head[N];
    inline void add(int x,int y)
    {
    	e[++num]=(edge){y,head[x]};head[x]=num;
    	e[++num]=(edge){x,head[y]};head[y]=num;
    }
    int w[N];
    multiset<int>s[N];
    multiset<int>::iterator it;
    void merge(int x,int y)//add y to x
    {
    	if(s[x].size()<s[y].size())swap(s[x],s[y]);
    	while(!s[y].empty())
    	{
    		it=s[y].begin();
    		s[x].insert(*it);
    		s[y].erase(it);
    	}
    }
    void dfs(int x,int fa)
    {
    	for(int i=head[x];i!=-1;i=e[i].nxt)
    	{
    		int to=e[i].to;
    		if(to==fa)continue;
    		dfs(to,x);merge(x,to);
    	}
    	it=s[x].lower_bound(w[x]);
    	if(it!=s[x].end())s[x].erase(it);
    	s[x].insert(w[x]);
    }
    int main()
    {
    	memset(head,-1,sizeof(head));
    	int n=read(),x;
    	for(int i=1;i<=n;i++)
    	{
    		w[i]=read();
    		x=read();
    		if(i!=1)add(i,x);
    	}
    	dfs(1,1);
    	printf("%d",(int)s[1].size());
    	return 0;
    }
    
  • 相关阅读:
    Server SQL Modes
    Java 8 New Features
    Spring Boot 企业级应用开发实战 刘伟东-2018年3月第一版
    一步一步学Spring Boot 2 微服务项目实战
    Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷
    深圳宝安图书馆官网错误 HTTP Status 500
    Springboot
    linux 操作 mysql 指定端口登录 以及启动 停止
    PHP 基础
    Magento 总结
  • 原文地址:https://www.cnblogs.com/Creed-qwq/p/10078893.html
Copyright © 2011-2022 走看看