zoukankan      html  css  js  c++  java
  • hdu 6430 bitset暴力

    题意:

    一棵有根树,1e5,输出每个节点的一个查询,查询定义为:以这个节点为根的树任选两个节点 权值GCD 最大 若没有孩子,则为-1

    思路:

    群里看见bitset居然有find_first()和find_next(x)的操作,搜了一下抄了一个大佬的思路具体实现就是 暴力子树的因子,用bitset合并,查询就在合并的时候&(保证了因子出现两次)然后find_first一下就行了。因为没有findlast,我们插入的时候反着插入就可以了 显然时间复杂度n*n/64

    代码:

    #include<bits/stdc++.h>
    #define PB push_back
    using namespace std;
    const int N = 1e5+7;
    vector<int> E[N];
    int v[N],ans[N],n,x;
    
    bitset<N> gao(int x){
        bitset<N> as(0),bs(0);
        for(int i=1;i*i<=v[x];i++)
            if(v[x]%i==0)as[N-i]=as[N-v[x]/i]=1;
        int ret=-1,en=E[x].size();
        for(int i=0;i<en;i++){
            bs=gao(E[x][i]);
            ret=max(ret,(int)(N-(as&bs)._Find_first()));
            as|=bs;
        }
        ans[x]=ret;
        return as;
    }
    
    int main(){
        std::ios::sync_with_stdio(false);
        cin>>n;
        for(int i=2;i<=n;i++){
            cin>>x;
            E[x].PB(i);
        }
        for(int i=1;i<=n;i++)cin>>v[i];
        gao(1);
        for(int i=1;i<=n;i++)cout<<ans[i]<<endl;
        return 0;
    }
    
  • 相关阅读:
    自动生成接口文档
    Haystack全文搜索
    redis操作
    缓存及跨域问题
    url控制器、解析器、响应器、分页器
    频率组件
    序列化、认证、权限、视图回顾
    认证、权限、视图组件
    序列化组件
    Rest Framework
  • 原文地址:https://www.cnblogs.com/zhangxianlong/p/10672475.html
Copyright © 2011-2022 走看看