设s[x][i]表示从根到x的异或和在第i位上的值(0/1),(a,b,i)表示a到b的异或和在第i位上的值
那么就有(a,b,i)=(s[a][i]^s[b][i]^s[lca][i]^s[lca][i])=(s[a][i]^s[b][i])
也就是说,能搞出来s[a][i]和s[b][i]的相同或不同关系
用一个并查集,把每个点拆成x和x',分别表示与x相同和与x不同
若中间出现了矛盾,就是Impossible
若最后同一侧的连通块数>2,就说明答案不唯一
然后对于每一条树上的边(a,b),如果a和b相同,这个边在第i位上就是0,否则就是1

 #include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=1e5+,maxm=2e5+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int eg[maxn][],id[maxn][][],pct;
int fa[maxn*],N,M;
int flag[maxn*]; inline int getf(int x){return x==fa[x]?x:fa[x]=getf(fa[x]);} inline void add(int a,int b){
int x=getf(a),y=getf(b);
if(x!=y) fa[x]=y;
} int main(){
//freopen("","r",stdin);
int i,j,k;
for(int T=rd();T;T--){
N=rd(),M=rd();
bool ans=;pct=;
for(i=;i<=N;i++){
for(j=;j<=;j++)
id[i][j][]=++pct,fa[pct]=pct,id[i][j][]=++pct,fa[pct]=pct;
}
for(i=;i<N;i++)
eg[i][]=rd(),eg[i][]=rd();
for(i=;i<=M;i++){
int a=rd(),b=rd(),w=rd();
for(j=;j<=;j++){
if((w>>(j-))&){
if(getf(id[a][j][])==getf(id[b][j][])) ans=;
add(id[a][j][],id[b][j][]);
add(id[a][j][],id[b][j][]);
}else{
if(getf(id[a][j][])==getf(id[b][j][])) ans=;
add(id[a][j][],id[b][j][]);
add(id[a][j][],id[b][j][]);
}
}
}
if(!ans){
printf("Impossible\n");
continue;
}
CLR(flag,);
for(i=;i<=;i++){
int cnt=;
for(j=;j<=N;j++){
if(!flag[getf(id[j][i][])])
flag[getf(id[j][i][])]=++cnt;
}
if(cnt>){ans=;break;}
}
if(!ans){
printf("No\n");
continue;
}
int mi=1e9,ma=;
for(i=;i<N;i++){
int a=eg[i][],b=eg[i][],x=;
for(j=;j<=;j++){
if(getf(id[a][j][])!=getf(id[b][j][]))
x|=<<(j-);
}
mi=min(mi,x),ma=max(ma,x);
}
printf("%d %d\n",mi,ma);
} return ;
}

loj6157 A ^ BProblem (并查集)的更多相关文章

  1. loj6157 A^B Problem (并查集)

    题目: https://loj.ac/problem/6157 分析: 这种树上异或,一般是采用分位考虑,但是这题即使分位,也会发现非常不好处理 这里考虑维护一个点到其根的路径的异或值 用并查集去检测 ...

  2. BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]

    4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...

  3. 关押罪犯 and 食物链(并查集)

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...

  4. 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

    图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...

  5. bzoj1854--并查集

    这题有一种神奇的并查集做法. 将每种属性作为一个点,每种装备作为一条边,则可以得到如下结论: 1.如果一个有n个点的连通块有n-1条边,则我们可以满足这个连通块的n-1个点. 2.如果一个有n个点的连 ...

  6. [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  7. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  8. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  9. Codeforces 731C Socks 并查集

    题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...

随机推荐

  1. 【学习总结】GirlsInAI ML-diary day-1-初识Python-Anaconda-Jupyter

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day1 初识Python-Anaconda-Jupyter: 1-下载并安装Anaconda 官网下载,按指导安装 ana ...

  2. mysql-SQL Error: 1205, SQLState: 41000

    mysql-SQL Error: 1205, SQLState: 41000——CSDN问答频道https://ask.csdn.net/questions/176492 mysql-SQL Erro ...

  3. Docker常规防止容器自动退出

    [root@server-crm /]# docker attach songheng [root@fc0a891e1861 /]# cat /bin/auto_service.sh #!/bin/s ...

  4. Linux&Windows中VNC协议及使用方法

    [转载]window下使用vnc远程登录ubuntu/linux图形界面_五个粽子_新浪博客http://blog.sina.com.cn/s/blog_677265f601012mqg.html V ...

  5. JavaScript中的函数和C#中的匿名函数(委托、lambda表达式)

    在js中function是一个一个引用类型,所以可以出现这样的代码: 'use strict'; var compare=function(value1, value2) { if (value1&l ...

  6. JSON Support in PostgreSQL and Entity Framework

    JSON 和JSONB的区别(What's difference between JSON and JSONB data type in PosgresSQL?) When should be use ...

  7. centOS 7下无法启动网络(service network start)错误解决办法

    今天在centOS 7下更改完静态ip后发现network服务重启不了,翻遍了网络,尝试了各种方法,终于解决了. 现把各种解决方法归纳整理,希望能让后面的同学少走点歪路... 首先看问题:执行serv ...

  8. SpringBoot 4.SpringBoot 整合 devtools 实现热部署

    一.添加 devtools 依赖 <!-- Spring boot 热部署 : 此热部署会遇到 java.lang.ClassCastException 异常 --> <!-- op ...

  9. zabbix自定义监控项

    原因:zabbix监控系统自带的监控规则有限,如果需要更加灵活的定义监控项,可以通过修改配置文件实现 vim xxx/zabbix_agentd.conf UnsafeUserParameters=1 ...

  10. RuntimeError: cryptography requires setuptools 18.5 or newer, please upgrade to a newer version of setuptool

    setuptool 太老了,更新下: pip install --upgrade setuptools