首页 > 其他分享 >D. X(or)-mas Tree

D. X(or)-mas Tree

时间:2024-07-16 11:19:10浏览次数:14  
标签:yh mas fa int Tree fx 异或 now

原题链接

题解

给定若干条路径限制,问是否合法

对于树上任意三个点 \(a,b,c\) (不一定直接相连),如果已知 \(a\oplus b,b\oplus c\) 那么 \(a\oplus c\) 也已知

所以我们可以对限制里相连的节点放到一个集合里,并且统一记录他们到集合头领的路径异或值

由于奇数个1异或偶数个1之间的异或和10异或的规则一样,所以我们用1代替奇数个1的异或值,0代替偶数个1的异或值

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=114514;

int fa[2*N];
int yh[2*N]={0};
int x[2*N],y[2*N],c[2*N];

int finds(int now)
{
    int f=fa[now];
    if(f==now) return now;
    int root=finds(f);
    yh[now]^=yh[f];
    return fa[now]=root;
}

bool flag=1;

void add(int a,int b,int v)
{
    int fx=finds(a),fy=finds(b);

    if(fx==fy)
    {
        if((yh[a]^yh[b])!=v) flag=0;
    }
    else
    {
        fa[fx]=fy;
        yh[fx]=yh[a]^yh[b]^v;
    }
}

void solve()
{
    int n,q;
    cin>>n>>q;

    for(int i=1;i<=n;i++)
    {
        fa[i]=i;
        yh[i]=0;
    }
    for(int i=1;i<n;i++)
    {
        cin>>x[i]>>y[i]>>c[i];

        if(c[i]!=-1) add(x[i],y[i],__builtin_popcount(c[i]) % 2);
    }

    while(q--)
    {
        int a,b,v;
        cin>>a>>b>>v;

        add(a,b,v);
    }
    if(!flag) cout<<"no\n";
    else
    {
        cout<<"yes\n";
        for(int i=1;i<n;i++)
        {
            if(c[i]!=-1)
            {
                cout<<x[i]<<' '<<y[i]<<' '<<c[i]<<'\n';
            }
            else
            {
                if(finds(x[i])==finds(y[i]))   cout<<x[i]<<' '<<y[i]<<' '<<(yh[x[i]]^yh[y[i]])<<'\n';
                else
                {
                    cout<<x[i]<<' '<<y[i]<<" 0\n";//这里的值是任意的,合并集合是为了让之后的没有限制的边的取值不产生矛盾;hack:所有边都是-1
                    add(x[i],y[i],0);
                }
            }
        }
    }
    flag=1;

}

int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) solve();
    return 0;
}

标签:yh,mas,fa,int,Tree,fx,异或,now
From: https://www.cnblogs.com/pure4knowledge/p/18304784

相关文章

  • 转型Web3开发第二课:Dapp开发入门基础 | 01 | 安装MetaMask
    前言完成了《转型Web3开发第一课》之后,得到了不少读者的认可,很多都在问什么时候开始下一课,近期终于抽出了时间开始搞起这第二课。这第二课的主题为「Dapp开发入门基础」,即想要转型做Dapp开发的人员,不管是做前端开发、后端开发、智能合约开发,都需要掌握的基础知识。这......
  • VisionMaster -Group循环、数组数据格式化
    目录1.循环索引-容易掉坑2.位置修正-容易掉坑3.检测方案总体4.匹配模板建立5.建立Group组合模块6.多物体测试循环7.输出数据8.格式化数据9.建立TCP通信设备10.发送数据1.循环索引-容易掉坑2.位置修正-容易掉坑3.检测方案总体左边是主流程,右边是组合模块内部......
  • Wmware简单用法之Tree、Find、修改文件的创建时间及删除 、Scp、生成指定大小的文件
    find主要进行文件搜索基本语法find[文件路径][选项选项的值]常见选项-name 根据文件名称搜索文件,支持通配符*-type f代表普通文件   d代表目录*通配符在linux系统中,如果要查找的⽂件的名称不清晰,可以使⽤部分⽂件名+*搜索[root@localhost~]#find/opt/......
  • 运算式树(Expression tree)深入学习
    前言运算式树(Expressiontree)是二叉树数据结构。目的是实现方便的叠加各种查询条件,无限制的拼接成一个查询条件。提高复杂查询逻辑的编码效率。一、Lambda表达式Lambda表达式分为运算式Lambda和语句式Lambda下面用两种lambda实现同样功能的委托。(1)运算式Lambda(Expressionla......
  • ECMA标准ECMAScript(JavaScript的一个标准)和C#
    2024年6月26日,第127届ECMA大会正式批准了ECMAScript2024语言规范,这意味着它现在正式成为最新ECMAScript标准。ECMAScript是ECMA标准中最著名的编程语言标准,它定义了JavaScript语言的核心特性。C#语言则是由ECMA国际组织制定的编程语言标准,目前最新的版本是ECMA-334......
  • Git提交时出现Merge branch ‘master‘ of ...之解决方法
    参考文章:https://gitcode.csdn.net/65ea8a4f1a836825ed794712.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTQ1MTY5NywiZXhwIjoxNzIxMjkxNTE4LCJpYXQiOjE3MjA2ODY3MTgsInVzZXJuYW1lIjoibWFudG91eW91eW91In0.-wDA8k8JLiSglywMGl6-Q1FSLkDiWW9_spoG16tpdtA......
  • Solution - Codeforces 1311E Construct the Binary Tree
    先去考虑找一下无解条件。首先就是有\(d\)关于\(n\)的下界\(L\),就是弄成一颗完全二叉树的答案。其次有\(d\)关于\(n\)的上界\(R\),就是成一条链的样子。首先当\(d<L\)或\(R<d\)时显然无解。对于\(L\led\leR\)又如何去判定。能发现没有一个比较好的判定......
  • Transformer模型:intra-attention mask实现
    前言    这是对Transformer模型WordEmbedding、PostionEmbedding、Encoderself-attentionmask内容的续篇。视频链接:20、Transformer模型Decoder原理精讲及其PyTorch逐行实现_哔哩哔哩_bilibili文章链接:Transformer模型:WordEmbedding实现-CSDN博客     ......
  • TreeMap
    TreeMap由红黑树实现,可以保持元素的自然顺序,或者实现了Comparator接口的自定义顺序红黑树(英语:Red–blacktree)是一种自平衡的二叉查找树(BinarySearchTree),结构复杂,但却有着良好的性能,完成查找、插入和删除的时间复杂度均为log(n)。自然顺序默认情况下,TreeMap是根据ke......
  • Transformer模型:Encoder的self-attention mask实现
    前言         这是对Transformer模型的WordEmbedding、PostionEmbedding内容的续篇。视频链接:19、Transformer模型Encoder原理精讲及其PyTorch逐行实现_哔哩哔哩_bilibili文章链接:Transformer模型:WordEmbedding实现-CSDN博客          Transf......