首页 > 其他分享 >E.Tree Xor

E.Tree Xor

时间:2024-10-23 10:59:48浏览次数:1  
标签:Xor int Tree back 100005 ans push id

  • 利用线段树划分区间【l,r】
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int l[100005],r[100005],w[100005];
vector<int>a[100005],c[100005];
vector<pair<int,int> >ans;
void ask(int l,int r,int u,int v,int id)
{
    if(u<=l&&v>=r)
    {
        int len=r-l+1;
        int val=(w[id]&(~(len-1)));
        l=l^val;
        r=r^val;
        ans.push_back(make_pair(l,1));
        ans.push_back(make_pair(r+1,-1));
        return;
    }
    int mid=(l+r)>>1;
    if(u<=mid)
    {
        ask(l,mid,u,v,id);
    }
    if(v>mid)
    {
        ask(mid+1,r,u,v,id);
    }
}
void dfs(int n1,int fa)
{
    for(int i=0;i<a[n1].size();i++)
    {
        if(a[n1][i]!=fa)
        {
            w[a[n1][i]]=w[n1]^c[n1][i];
            dfs(a[n1][i],n1);
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>l[i]>>r[i];
    }
    for(int i=1;i<n;i++)
    {
        int u,v,w;
        cin>>u>>v>>w;
        a[u].push_back(v);
        a[v].push_back(u);
        c[u].push_back(w);
        c[v].push_back(w);
    }
    dfs(1,0);
    for(int i=1;i<=n;i++)
    {
        ask(0,(1<<30)-1,l[i],r[i],i);
    }
    sort(ans.begin(),ans.end());
    int cur=0,la=0,res=0;
    for(int i=0;i<ans.size();i++)
    {
        if(cur==n)
        {
            res=res+ans[i].first-la;
        }
        cur=cur+ans[i].second;
        la=ans[i].first;
    }
    cout<<res<<endl;
    return 0;
}

标签:Xor,int,Tree,back,100005,ans,push,id
From: https://www.cnblogs.com/watersail/p/18495939

相关文章

  • EPIC Institute of Technology Round Summer 2024 (Div. 1 + Div. 2) E. Wonderful Tr
    题目链接EPICInstituteofTechnologyRoundSummer2024(Div.1+Div.2)E.WonderfulTree!思路题目要求令所有的av≤......
  • 洛谷P3850 [TJOI2007] 书架 splay tree 模板题
    题目链接:https://www.luogu.com.cn/problem/P3850主要操作就是:插入+查询第k值。示例程序:#include<bits/stdc++.h>usingnamespacestd;constintmaxn=1.1e5+5,maxb=20;structNode{ints[2],p,sz;stringname;Node(){}Node(string_n......
  • 洛谷P2596 [ZJOI2006] 书架 题解 splay tree 模板题
    题目链接:https://www.luogu.com.cn/problem/P2596主要涉及的操作就是:找到某一个编号的点(这个操作可以不用splaytree维护)删除某个点将某一个点插入到最前面,最后面,或者某一个位置查询前序遍历为\(k\)的节点编号因为每次删除都会又把这个点加回去,所以可以复用\(n\)个......
  • 非常牛 dsu on tree
    轩辕4721年,彩笔@硒六爱吃硫,在某日的西艾斯批%你赛中花了两个小时切掉了T1和T2。随后看到T3,心想:“这不是傻逼题吗,建下克鲁斯卡尔重构树然后瞎几把低批不就做完了吗。”发现并不会低批。思考了一个小时发现并不是沙比低批,而是地艾斯优盎吹。@硒六爱吃硫打完暴力。注意到......
  • BehaviorTree、QP状态机与有限状态机(FSM)的比较分析
            在现代软件开发中,状态管理是确保系统行为正确性和高效性的关键。BehaviorTree、QP状态机和有限状态机(FSM)是三种常用的状态管理工具,它们各自适用于不同的场景。以下将通过具体例子和伪代码来比较这三种工具的特点和适用性。BehaviorTree:游戏AI的灵活决策Behav......
  • [ABC337G] Tree Inversion(换根 dp + 值域线段树)
    link题目形式就很换根dp如果这种题用朴素的做法求,就是暴力以每个点都做一次根跑树,自底向上统计,时间是\(O(n^2)\)而换根dp的思想就是分两步,一般先钦定某个点(如1)为根,统计一遍以1为根时的结果,然后挖掘如果以其他点为根时,变换对结果的影响,一般就是自顶向下更新如果换根后......
  • 三,TreeMap和HashMap,TreeSet和HashMap的区别以及方法使用上的不同
    TreeMap和HashMap的区别TreeMap:基于红黑树实现。提供了范围查询和排序功能。所有操作的时间复杂度为O(logn)。不允许键为null。键必须实现Comparable接口或提供一个Comparator。HashMap:基于哈希表实现。提供快速的查找、插入和删除操作。平均时间复杂度为O(1),......
  • 闯关leetcode——110. Balanced Binary Tree
    大纲题目地址内容解题代码地址题目地址https://leetcode.com/problems/balanced-binary-tree/description/内容Givenabinarytree,determineifitisheight-balanced.Aheight-balancedbinarytreeisabinarytreeinwhichthedepthofthetwosub......
  • [CF1616H] - Keep XOR Low 的题解
    一道比较神奇的题目,状态显得比较扯淡,但是就是能过!先建立出trie树,设\(dp_u\)表示以\(u\)为根的子树内的答案。但我们发现,若\(x\)的当前位为\(1\),那么问题就没法根据他的左右子树求解了,怎么办呢。考虑一个很扯淡的状态,设\(dp_{u,v}\)表示考虑了\(u,v\)为根的子树,他......
  • [ARC185D] Random Walk on Tree 题解
    一个很套路的做法。思路题目要求走完整个树的时间,这并不好算,容易想到min-max容斥。依据min-max容斥,我们可以轻松把它转化成第一次走到所有子集的时间。考虑在这道题中,有什么特殊的。第一,任何包含根节点的子集答案都是零。第二,由于我们只关心第一次走到的点的时间,因此假......