loj#6157 A ^ B Problem
分析
用并查集维护
每次一个连通块的每个点记录它到当前连通块的根的异或值
对于不符合的情况容易判断
最后判断是否都在一个连通块内然后记录答案即可
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[],b[],fa[],w[];
inline int sf(int x){if(fa[x]==x)return x;int f=sf(fa[x]);w[x]^=w[fa[x]];return fa[x]=f;}
int main(){
int i,j,k,t,ok;
scanf("%d",&t);
while(t--){
int mn=1e9+,mx=;
ok=;scanf("%d%d",&n,&m);
for(i=;i<=n;i++)fa[i]=i,w[i]=;
for(i=;i<n;i++)scanf("%d%d",&a[i],&b[i]);
for(i=;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
int xx=sf(x),yy=sf(y);
if(xx==yy){
if((w[x]^w[y])!=z)ok=;
}else {
fa[xx]=yy;
w[xx]=(w[x]^w[y]^z);
}
}
if(!ok)puts("Impossible");
else {
for(i=;i<n;i++){
if(sf(a[i])!=sf(b[i])){
ok=;
puts("No");
break;
}
mn=min(mn,(w[a[i]]^w[b[i]]));
mx=max(mx,(w[a[i]]^w[b[i]]));
}
if(ok)printf("%d %d\n",mn,mx);
}
}
return ;
}
loj#6157 A ^ B Problem的更多相关文章
- LOJ [#115. 无源汇有上下界可行流](https://loj.ac/problem/115)
#115. 无源汇有上下界可行流 先扔个板子,上下界的东西一点点搞,写在奇怪的合集里面 Code: #include <cstdio> #include <cstring> # ...
- loj6157 A^B Problem (并查集)
题目: https://loj.ac/problem/6157 分析: 这种树上异或,一般是采用分位考虑,但是这题即使分位,也会发现非常不好处理 这里考虑维护一个点到其根的路径的异或值 用并查集去检测 ...
- LOJ子序列
题目描述 https://loj.ac/problem/6074 题解 对于子序列的dp,我们可以设置一个dp. 我们设dp[i]表示以i这个字符结尾的子序列个数,转移为dp[i]+=∑dp[k]-d ...
- Loj #528. 「LibreOJ β Round #4」求和 (莫比乌斯反演)
题目链接:https://loj.ac/problem/528 题目:给定两个正整数N,M,你需要计算ΣΣu(gcd(i,j))^2 mod 998244353 ,其中i属于[1,N],j属于[1,M ...
- Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)
题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...
- loj 6008 餐巾计划 - 费用流
题目传送门 传送门 题目大意 (经典题还不知道题意?) 容易想到需要把未使用的餐巾和已经使用的餐巾分开. 设$X_i$表示第$i$天已经的使用餐巾的点,设$Y_i$表示第$i$天还未使用的餐巾的点 我 ...
- loj 6037 「雅礼集训 2017 Day4」猜数列 - 动态规划
题目传送门 传送门 题目大意 有一个位置数列,给定$n$条线索,每条线索从某一个位置开始,一直向左或者向右走,每遇到一个还没有在线索中出现的数就将它加入线索,问最小的可能的数列长度. 依次从左到右考虑 ...
- loj #6.Guess Number
原题链接:https://loj.ac/problem/6 Guess Number 内存限制:256 MiB 时间限制:1000 ms 题目类型:交互 题目描述 这是一个交互题的模板. 系统会随机生 ...
- LOJ 3089 「BJOI2019」奥术神杖——AC自动机DP+0/1分数规划
题目:https://loj.ac/problem/3089 没想到把根号之类的求对数变成算数平均值.写了个只能得15分的暴力. #include<cstdio> #include< ...
随机推荐
- tableview(model base)
该tableview控件的用法: 1.原理: 数据存放在“表”对象中,而将这个对象关联到tableview控件之后,将实现在UI中展示出来. class Query_Students : public ...
- 洛谷 - P1346 - 电车 - Dijkstra/01BFS
https://www.luogu.org/problem/P1346 使用最短路之前居然忘记清空了. #include<bits/stdc++.h> using namespace st ...
- C#GC垃圾回收和析构函数和IDisposable的使用
一,什么是GC 1,GC是垃圾回收器,一般来说系统会自动检测不会使用的对象或变量进行内存的释放,不需要手动调用,用Collect()就是强制进行垃圾回收,使内存得到及时的释放,让程序效率更高. 2,G ...
- 禁止input输入框历史记录
<input type="text" autocomplete="off" />
- react native 在vscode上运行
1.在用react-native init xxx 创建rn项目之后,在Android目录中创建local.properties文件 =后面接上sdk地址 2.react-native start 命 ...
- Spring基础05——Spring依赖注入的三种方式
Spring支持3种依赖注入的方式:属性注入.构造器注入.工厂 1.属性注入 属性注入即通过setter方法注入Bean的属性或依赖的对象.使用<property>元素,使用name属性指 ...
- 16.Linux-CentOS系统进入单用户模式修改root用户密码操作
问题描述: root用户密码忘记,进入单用户重置root用户密码 解决步骤: 1.重启服务器,在系统显示内核版本界面后“按E键”,进入内核启动项2.找到Linux16这一行段,将“ro”修改成“rw” ...
- 基于tcp和udp协议的套接字
socket:是在应用层和传输层之间的一个抽象层,它把TCP/IP层的复杂的操作封装抽象,并提供一些接口供应用层调用 套接字:被设计用于同一台主机上多个应用程序之间的通信,被称为进程之间通信或IPC ...
- Codeforces Round #430 (Div. 2) - D
题目链接:http://codeforces.com/contest/842/problem/D 题意:定义Mex为一个序列中最小的未出现的正整数,给定一个长度为n的序列,然后有m个询问,每个询问给定 ...
- 如何获得带转义的json内容
stringify两次 JSON.stringify(JSON.stringify(obj))