原题链接

思路

看到这道题,很明显就能发现这道题其实跟图论有关,将\(A\)数组看成一张无向图,每一个节点\(i\)的点权就是\(A_i\),每两个节点\(i\)和\(j\)之间的边权就是\(A_i \oplus A_j\)。而我们可以枚举答案的每一个比特位,用BFS(或DFS,作者这里用的是BFS)来维护每一个连通块(因为只有连通块中的节点会相互影响),如果任意一个连通块中的节点发生了矛盾,则直接输出\(-1\)(因为只要有一个比特位不符合,所有答案就会有错误),并将程序结束。否则如果所有的节点都满足条件,则将答案记录下来,并在最后输出。

CODE

#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
int n,m,x[100010],y[100010],z[100010],zy[200010],tp[200010];
vector<pair<int,int> >vec[200010];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x[i]>>y[i]>>z[i]; //输入
vec[x[i]].push_back(make_pair(y[i],z[i])); //建无向边
vec[y[i]].push_back(make_pair(x[i],z[i]));
}
for(int i=0;i<=30;i++) //枚举每一个比特位,因为10的9次方小于2的31次方,所以只用枚举31位就够了
{
memset(tp,-1,sizeof(tp)); //初始化标记数组,因为比特位的两种情况分别为0和1,所以只能初始化为-1
for(int j=1;j<=n;j++)
{
if(tp[j]!=-1) continue; //如果在一个连通块中,则跳过这个节点
vector<int> ls;
queue<int> q;
tp[j]=0;
q.push(j);
while(!q.empty())
{
int l=q.front();
q.pop();
ls.push_back(l);
for(auto eg:vec[l]) //遍历每条边
{
int v=eg.first,w=eg.second;
if(tp[v]==-1) //如果没有初始值
{
tp[v]=((w>>i)&1)^tp[l]; //赋初始值
q.push(v); //BFS
}
else
{
if(tp[v]!=((w>>i)&1)^tp[l]) //不符合条件
{
cout<<-1;
return 0; //结束程序
}
}
}
}
int cnt=0;
for(auto v:ls) if(tp[v]==1) cnt++;
if(cnt>ls.size()-cnt) for(auto v:ls) tp[v]=1-tp[v]; //这样做是因为这个图是一个无向图,会有两种相反的答案,而题目要求A数组总和最小,所以我们要让比特位上的1最少才能使答案最小
for(auto v:ls) if(tp[v]==1) zy[v]|=(1<<i); //更新答案
}
}
for(int i=1;i<=n;i++) cout<<zy[i]<<' '; //输出答案
return 0;
}

AtCoder Beginner Contest 396-e的更多相关文章

  1. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  2. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  3. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  8. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  9. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

  10. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

随机推荐

  1. [双体系练习]Java基础练习题1

    因为练习是word,本文我只是写了里面的部分内容,如果想查阅完整内容或者获取word以及PDF,请 关注微信公众号 乖乖狼科技 发送口令 akcd T1 静态代码块中不能? · [D ] A. 初始化 ...

  2. 【MyBatis】学习笔记06:各种查询所返回数据的数据类型

    [Mybatis]学习笔记01:连接数据库,实现增删改 [Mybatis]学习笔记02:实现简单的查 [MyBatis]学习笔记03:配置文件进一步解读(非常重要) [MyBatis]学习笔记04:配 ...

  3. 部署SkyWalking

    SkyWalking部署说明 二进制包部署 1.下载地址 https://dlcdn.apache.org/skywalking/9.4.0/apache-skywalking-apm-9.4.0.t ...

  4. Qt/C++音视频开发58-逐帧播放/上一帧下一帧/切换播放进度/实时解码

    一.前言 逐帧播放是近期增加的功能,之前也一直思考过这个功能该如何实现,对于mdk/qtav等内核组件,可以直接用该组件提供的接口实现即可,而对于ffmpeg,需要自己处理,如果有缓存的数据的话,可以 ...

  5. Qt编写安防视频监控系统31-onvif设备搜索

    一.前言 做视频监控系统,绕不过onvif这玩意,这玩意主要就是为了统一一个大概的标准,能够对各个厂家的监控设备进行常用的一些操作,比如搜索.获取信息.云台控制.事件订阅.抓拍图片等,如果没有这个规范 ...

  6. AI 与 Mermaid 使用教程之流程图 - 从入门到精通

    本文由 Mermaid中文文档 整理而来,并且它同时提供了一个 Mermaid在线编辑器,支持在线编辑与生成流程图. 在文章的末尾我们将介绍如何使用AI来自动生成 Mermaid 流程图. Merma ...

  7. CDS标准视图:银行对账单行项目 I_BankStatementItem

    视图名称:银行对账单行项目 I_BankStatementItem 视图类型:基础视图 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IBANKSTATMENTITM ...

  8. biancheng-Maven依赖

    目录http://c.biancheng.net/maven2/profile.html 1Maven简介2Maven安装与配置3Maven POM4创建Maven项目5Maven项目的构建与测试6M ...

  9. 深入理解第二范式(2NF):提升数据库设计的有效性与灵活性

    title: 深入理解第二范式(2NF):提升数据库设计的有效性与灵活性 date: 2025/1/16 updated: 2025/1/16 author: cmdragon excerpt: 数据 ...

  10. nginx配置好访问返回502错误

    CentOS服务器配置好Nginx重新加载了配置文件,浏览器访问提示错误: 502 Bad Gatewaynginx/1.16.1 如图: 页面上直接显示了nginx名称,一般是说nginx服务器返回 ...