牛客网-Beauty of Trees 【加权并查集】
锟斤拷锟接o拷https://www.nowcoder.com/acm/contest/119/A
锟斤拷源锟斤拷牛锟斤拷锟斤拷
锟斤拷目锟斤拷锟斤拷
One day the tree manager wants to play a game with you. There are N trees lining up in a straight road. The beauty of a set of trees is defined as the bitwise XOR sum of the heights of these trees. The game will last for M rounds, and each time he will tell you an interval [Li,Ri] and its beauty. However, he mixed some fake messages with the correct ones. Your task is to find the messages that cannot logically correspond to its former correct messages. Otherwise you锟斤拷ll think the message is correct.
锟斤拷锟斤拷锟斤拷锟斤拷:
The first line contains two integer N and M(1锟斤拷N,M锟斤拷10
5
), the number of trees and the rounds of game.
Then M lines followed, in each line are three integer L, R and k(1锟斤拷L锟斤拷R锟斤拷N,0锟斤拷k锟斤拷10
9
), indicating that the beauty of [L
i
,R
i
] is k.
锟斤拷锟斤拷锟斤拷锟�:
If the i-th message is wrong, then print i in a single line.
If there is no mistake, print -1.
锟斤拷锟斤拷
3 4
1 3 6
1 2 5
3 3 10000
3 3 3
锟斤拷锟�
3
说锟斤拷
You can infer from the first two messages that the height of the third tree is 3.
r[a]记录的是a与其父亲节点的异或值
1 /**
2 先要知道加权并查集:https://blog.csdn.net/qq_32944513/article/details/80218138
3 然后 这里
4 设 P[i] 为 0~i 的异或值, 则给了 (L,R)=k 相当就是知道了 P[r]^P[l-1]=k;
5 这样转化一下 就和 LA4487 差不多了。
6 **/
7 #include<iostream>
8 #include<stdio.h>
9 #include<string.h>
10 #include<vector>
11 #include<map>
12 #include<algorithm>
13 using namespace std;
14 typedef long long int ll;
15 const int maxn = 100000;
16 const int inf = 1e9;
17 int n,m,fa[maxn+5],r[maxn+5],ans[maxn+5];
18 int findset(int x)
19 {
20 if(fa[x] == x) return x;
21 int fx = fa[x];
22 fa[x] = findset(fa[x]);
23 r[x]^=r[fx];
24 return fa[x];
25 }
26 int Merge(int u,int v,int z)
27 {
28 int fx = findset(u), fy = findset(v);
29 if(fx==fy)
30 {
31 return (r[u]^r[v])==z;
32 }
33 fa[fx] = fy;
34 r[fx]=r[u]^r[v]^z;
35 return true;
36 }
37 int main()
38 {
39 int num = 0;
40 scanf("%d %d",&n,&m);
41 for(int i=0;i<=n;i++) fa[i] = i,r[i] = 0;
42 for(int i=1; i<=m; i++)
43 {
44 int l,r,w;
45 scanf("%d %d %d",&l,&r,&w);
46 if(!Merge(l-1,r,w)) ans[++num] = i;
47 }
48 for(int i=1;i<=num;i++) printf("%d\n",ans[i]);
49 if(num==0) printf("-1\n");
50 return 0;
51 }
官方题解:
1 /*
2 考虑给定的区间[L,R]中的数和美丽值k的二进制分解。对于第j位,如果k在这一位是1,
3 说明[L,R]之间在这一位为1的数有奇数个,接下来令f[i][j]表示第j位为1的数在前i个数里有多少个,
4 那么这个条件也就是f[l-1][j]与f[r][[j]奇偶性不同;若k在这一位为0,
5 说明f[l-1][j]与f[r][j]奇偶性相同。注意上述条件都是等价的,
6 也就是说如果所有的j位f[l-1][j]和先前确定的与f[r][j]的关系不矛盾的话,
7 就等价于题目所给的合乎逻辑。这个过程可以用并查集来完成。
8 对于每一个前缀和开一个实点一个虚点,如果两个前缀和奇偶性相同,
9 就实对实虚对虚相连;如果奇偶性不同,就各自实对虚相连。
10 这样就能保证与任意节点奇偶性偶数次不同相当于奇偶性相同。然后判断的时候可以直接查询。
11 */
12 #include<cstdio>
13 #include<cstring>
14 #include<iostream>
15
16 using namespace std;
17
18 const int maxn=1e5+10;
19
20 int n,m,l,r,k,fl,cnt;
21 int f[maxn*2][32];
22
23 int find(int t,int k)
24 {
25 int p=t,r;
26 while(t!=f[t][k])t=f[t][k];
27 while(p!=t)r=f[p][k],f[p][k]=t,p=r;
28 return t;
29 }
30
31 void unio(int l,int r,int j)
32 {
33 if(find(l,j)!=find(r,j))
34 f[find(l,j)][j]=find(r,j);
35 }
36
37 int main()
38 {
39 scanf("%d%d",&n,&m);
40 for(int i=0; i<=n*2+1; i++)
41 for(int j=0; j<=30; j++)
42 f[i][j]=i;
43
44 for(int i=1; i<=m; i++)
45 {
46 fl=0;
47 scanf("%d%d%d",&l,&r,&k);
48 l--;
49
50 for(int j=0; j<=30; j++)
51 if((k&(1LL<<j))!=0&&(find(l,j)==find(r,j)||find(l+n+1,j)==find(r+n+1,j)))
52 {
53 printf("%d\n",i);
54 fl=1;
55 break;
56 }
57 else if((k&(1LL<<j))==0&&(find(l,j)==find(n+r+1,j)||find(r,j)==find(n+l+1,j)))
58 {
59 printf("%d\n",i);
60 fl=1;
61 break;
62 }
63 if(fl)continue;
64
65 cnt++;
66 for(int j=0; j<=30; j++)
67 if((k&(1LL<<j))!=0)unio(l,r+n+1,j),unio(r,l+n+1,j);
68 else unio(l,r,j),unio(l+n+1,r+n+1,j);
69 }
70
71 if(cnt==m)printf("-1");
72
73 return 0;
74 }
参考博客:戳这里
牛客网-Beauty of Trees 【加权并查集】的更多相关文章
- 牛客网-Beautiful Land 【01背包 + 思维】
链接:https://www.nowcoder.com/acm/contest/119/F来源:牛客网 Now HUST got a big land whose capacity is C to p ...
- 牛客网 --java问答题
http://www.nowcoder.com/ 主要是自己什么都不怎么会.在这里可以学习很多的! 第一天看题自己回答,第二天看牛客网的答案! 1 什么是Java虚拟机?为什么Java被称作是“平台无 ...
- 牛客网《BAT面试算法精品课》学习笔记
目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...
- C++版 - HDUoj 2010 3阶的水仙花数 - 牛客网
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C++版 - ...
- 牛客网第9场多校E(思维求期望)
链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 题目描述 Niuniu likes to play OSU! We simplify the ...
- 牛客网暑期ACM多校训练营(第七场)Bit Compression
链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 题目描述 A binary string s of length N = 2n is give ...
- Beautiful Numbers(牛客网)
链接:https://ac.nowcoder.com/acm/problem/17385来源:牛客网 题目描述 NIBGNAUK is an odd boy and his taste is stra ...
- 牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 牛客网Wannafly挑战赛25A 因子(数论 素因子分解)
链接:https://www.nowcoder.com/acm/contest/197/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
随机推荐
- 解决JS获取中文参数出现的乱码问题
在代码中增加如下js函数: function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + " ...
- CSS3+JS完美实现放大镜模式
最近看到一篇讲放大镜的文章,实践后感觉效果非常好,这里分享给大家. 效果如下: 其实现核心: CSS函数,如:calc() -- 动态计算:var() -- 使用自定义变量 CSS伪元素:::befo ...
- 前端面试之CSS常用的选择器!
前端面试之CSS常用的选择器! 标签选择器 <style> /* <!-- 标签选择器 :写上标签名 -->*/ p { color: green; } div { color ...
- Connection Manager简称connman
ConnMan Connection Manager简称connman,connman是使用d-bus做为进程间通信机制来管理Linux网络链接的一种软件.在connman的d-bus接口中,有 ...
- 在HDFS中将文件从源路径移动到目的路径。
import java.text.SimpleDateFormat; import java.util.Scanner; import org.apache.hadoop.fs.FSDataInput ...
- noip 注意事项 (个人向)
目录 非常重要 对拍 空间 极限数据 模数,YES/NO等大小写 个人 考场 神仙 czdzx 说要写,我也来写 非常重要 对拍 空间 极限数据 模数,YES/NO等大小写 个人 养身体,不要紧张,不 ...
- 急~为啥我指定的的maven依赖版本没有生效?不是最短路径原则吗?
女朋友他们项目用了 spring-boot,以 spring-boot-parent 作为 parent: <parent> <groupId>org.springframew ...
- EasyExcel导出小结:动态标题、标题格式、相同值合并
1. 实列相关依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel& ...
- hasOwnProperty和 ... in ...的区别
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键).https://developer.mozilla.org/zh-CN/docs ...
- mysql数据恢复:.frm和.ibd,恢复表结构和数据
mysql数据恢复:.frm和.ibd,恢复表结构和数据 一.恢复表结构 二.恢复表数据 相关内容原文地址: CSDN:她说巷尾的樱花开了:mysql根据.frm和.ibd文件恢复表结构和数据 博客园 ...