2017 ACM/ICPC 新疆赛区 I 题 A Possible Tree 带权并查集

传送门 
题意:给定一棵带权树的形态, 但是并不知道每天条边的具体权重.

然后给m个信息, 信息格式为u v val, 表示在树上u 到 v 的路径上经过的边的权重的异或和为val, 问前面最多有多少个信息是不冲突的.

思路:首先很明显的我们要维护一系列不知道的信息, 看冲不冲突的那就是带权并查集没跑了, 此时r[v] 表示v到这棵树的根节点(虽然题目没给, 但是我们可以假设一个)的路径异或和, 那么此时的每条信息相当于是告诉你r[u] ^ r[v]的值, 注意异或的特性. 所以对于每条信息维护好当前的集合的信息, 如果遇到某次的连个点已经在一个集合中时, 那么他们之间的异或值也应该被确定了, 如果不等于题目的值那就是冲突的了… 压缩路径时根据r代表的意义, 所以就是r[v] ^= r[fav]; 这道题还是算带权并查集中较简单的那种…. 还是挺好的题目. 
去年比赛的时候还不会带权并查集(逃

注:注意bool型函数没有返回值会默认返回为false.

#include<bits/stdc++.h>
using namespace std;

const int N = 1e5+10;
int n, m , fa[N], V[N];
void init() {
    for(int i=0;i<=n;i++) {
        fa[i] = i;
        V[i] = 0;
    }
}

int Find(int x) {
    if(fa[x] == x) return x;
    int tmp = fa[x];
    fa[x] = Find(fa[x]);
    V[x] ^= V[tmp];
    return fa[x];
}

bool join(int u,int v,int k) {
    int fu = Find(u);
    int fv = Find(v);
    if(fu != fv) {
        fa[fu] = fa[fv];
        V[fu] = V[u]^V[v]^k;
        return true;
    }
    if((V[u]^V[v])!=k) return false;
    return true;
}

int main () {
    int T,cas; scanf("%d",&T);
    while (T--) {
        scanf("%d %d", &n, &m);
        init();
        for(int i=1; i<n; i++) {
            int u,v;
            scanf("%d %d",&u,&v);
        }
        int t = m+1;
        for(int i=1;i<=m;i++) {
            int u,v,val;
            scanf("%d %d %d",&u, &v, &val);
            if(t != m+1) continue;
            if(!join(u,v,val))
                t = i;
        }
        printf("%d\n",t-1);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/Draymonder/p/9595547.html

时间: 2024-08-28 00:24:59

2017 ACM/ICPC 新疆赛区 I 题 A Possible Tree 带权并查集的相关文章

Valentine&#39;s Day Round hdu 5176 The Experience of Love [好题 带权并查集 unsigned long long]

传送门 The Experience of Love Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 221    Accepted Submission(s): 91 Problem Description A girl named Gorwin and a boy named Vivin is a couple. They arriv

2017 ACM/ICPC 北京赛区小结 By JSB @ Reconquista

之前的蜜汁格式等待拷贝lsmll学长. Day -2 出发前晚上还训了一场.C题是个MST规律题,我傻乎乎地写了个状压,快写完才发现复杂度爆炸了:颜学长有一题似乎被卡常数了?然后就日常被二队虐了两个题.>_< Day -1 早上4:20起床,和John.lzw学长一起打车去机场. 在飞机上,风学长悉心指导我如何优雅地向空姐要四杯饮料>< 之前听说川航的空餐很不错,终于尝到了呢! 在翔景轩酒店安顿好后,大家就迫不及待地去必胜客.吃饱后我还强行往嘴里塞披萨--学生打八折,大家都吃得挺欢

zoj 3662 第37届ACM/ICPC长春赛区H题(DP)

题目:给出K个数,使得这K个数的和为N,LCM为M,问有多少种 f[i][j][k]表示选i个数,总和为j,最小公倍数为k memery卡的比较紧,注意不要开太大,按照题目数据开 这种类型的dp也是第一次做 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue&g

hdu 4462 第37届ACM/ICPC 杭州赛区 J题

题意:有一块n*n的田,田上有一些点可以放置稻草人,再给出一些稻草人,每个稻草人有其覆盖的距离ri,距离为曼哈顿距离,求要覆盖到所有的格子最少需要放置几个稻草人 由于稻草人数量很少,所以状态压缩枚举,之后慢慢判断即可,注意放稻草人的格子是不需要覆盖的 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath>

hdu 4461 第37届ACM/ICPC杭州赛区I题

题意:给两个人一些棋子,每个棋子有其对应的power,若b没有或者c没有,或者二者都没有,那么他的total power就会减1,total power最少是1,求最后谁能赢 如果b或c出现的话,flag就标记为1,那么在判断的时候如果flag==0,就说明他们没出现过,那么就要-1,然后就wa了,必须要两个变量判断,不知道为什么 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #inclu

hdu 4463 第37届ACM/ICPC杭州赛区K题 最小生成树

题意:给坐标系上的一些点,其中有两个点已经连了一条边,求最小生成树的值 将已连接的两点权值置为0,这样一定能加入最小生成树里 最后的结果加上这两点的距离即为所求 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map>

2015 ACM/ICPC Asia Regional Changchun Online Pro 1002 (拓扑排序+并查集)

Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description Betty owns a lot of ponds, some of them are connected with other ponds by pipes, and th

【poj 1988】Cube Stacking(图论--带权并查集 模版题)

题意:有N个方块,M个操作{“C x”:查询方块x上的方块数:“M x y”:移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法:带权并查集.每堆方块作为一个集合,维护3个数组:fa[x]表示x方块所在堆的最顶部的方块:d[x]表示x方块所在堆的最底部的方块:f[x]表示x方块方块x上的方块数. 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<

hdu 5441 (2015长春网络赛E题 带权并查集 )

n个结点,m条边,权值是 从u到v所花的时间 ,每次询问会给一个时间,权值比 询问值小的边就可以走 从u到v 和从v到u算不同的两次 输出有多少种不同的走法(大概是这个意思吧)先把边的权值 从小到大排序 询问值也按从小到大排序num记录集合里元素的个数每合并两个集合 ans增加 2*num[u]*num[v] Sample Input15 5 3 //n w q2 3 63341 5 157243 5 57054 3 123821 3 2172660001000013000 Sample Out