#include<bits/stdc++.h>
using namespace std;
int f[200010];//代表元
long long rl[200010];//记rl[i]为结点i到根的路径上所有边的亦或和(这里可以忽视 x(0)的情况)
void init(int n)
{
    for(int i=1;i<=n;i++)
        f[i]=i,rl[i]=0;//初始化
}
int fd(int x)//并查集模板
{
    if(f[x]==x)
        return x;
    int fa=f[x];
    f[x]=fd(f[x]);
    rl[x]=rl[x]^rl[fa];//由于x更换了代表元,换的路径要算上
    return f[x];
}
int join(int x,int y,long long val)
{
    int fx=fd(x),fy=fd(y);
    if(fx==fy)
        return 0;
    f[fx]=fy;
    rl[fx]=rl[fx]^rl[x]^rl[y]^val;//同一个集合(代表元为 c)
//内两个元素 a 和 b 的亦或值为 x(a) xor x(b) = (x(a) xor x(c)) xor (x(b) xor x(c))。
    return 1;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,c;
        scanf("%d%d",&n,&c);
        int x,y;
        for(int i=1;i<n;i++)
            scanf("%d%d",&x,&y);
        init(n);
        int xx,yy;
        long long val;
        int ans=c;
        for(int i=1;i<=c;i++)
        {
            scanf("%d%d%lld",&xx,&yy,&val);
            if(ans!=c)
                continue;
            if(!join(xx,yy,val)&&(rl[xx]^rl[yy])!=val)//当某一条信息中两点xx与yy在同一连通块上,
            //那么就必须满足xx与yy各自代表元异或的值等于val,否则就停止,只能满足之前的要求数量。
                ans=i-1;
        }
        printf("%d\n",ans);
    }
    return 0;
}
//带权并查集可以考虑模板,根据实际问题修改里面的变量

2017乌鲁木齐区域赛I(带权并查集)的更多相关文章

  1. [NOIP摸你赛]Hzwer的陨石(带权并查集)

    题目描述: 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域 ...

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

    传送门 题意:给定一棵带权树的形态, 但是并不知道每天条边的具体权重. 然后给m个信息, 信息格式为u v val, 表示在树上u 到 v 的路径上经过的边的权重的异或和为val, 问前面最多有多少个 ...

  3. POJ 1988 Cube Stacking( 带权并查集 )*

    POJ 1988 Cube Stacking( 带权并查集 ) 非常棒的一道题!借鉴"找回失去的"博客 链接:传送门 题意: P次查询,每次查询有两种: M x y 将包含x的集合 ...

  4. 【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)

    题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账. 解法:带权并查集+前缀和.   判断账本真假是通过之前可算到的答案与当前读入的值是否 ...

  5. POJ1988(带权并查集,搬砖块)

    题意:        可以这样理解,有n快方形积木,一开始都是单独的放到哪,然后有两种操作 1 M a b 把a所在的那一堆落到b所在那一堆的上面(一开始自己是一堆) 2 C a 问a下面有多少个积木 ...

  6. POJ 1703 Find them, Catch them(带权并查集)

    传送门 Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42463   Accep ...

  7. poj1417 带权并查集 + 背包 + 记录路径

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2713   Accepted: 868 Descrip ...

  8. poj1984 带权并查集(向量处理)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 5939   Accepted: 2 ...

  9. 【BZOJ-4690】Never Wait For Weights 带权并查集

    4690: Never Wait for Weights Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 88  Solved: 41[Submit][ ...

随机推荐

  1. PLSQL Developer使用技巧整理

      Shortcut: =============================================================================== Edit/Und ...

  2. ZOJ 2724 Windows Message Queue (二叉堆,优先队列)

    思路:用优先队列 priority_queue,简单 两种方式改变队列 的优先级 (默认的是从大到小) #include<iostream> #include<queue> # ...

  3. beans.factory.BeanCreationException beans.factory.annotation.Autowired(required=true)

    主要是这三个方面排查: 1,注入写成这样 @Autowired   private BrandServiceImpl      brandServiceImpl; 2,jar冲突,在pom.xml中 ...

  4. 使用myeclipes制造属于自己的jar

    选定你需要在jar中包含的package或者class 步骤1:右键export导出, 步骤2:导出类型为java --JRE  file. 步骤3:直接finish即可完成 如果希望你的jar带源码 ...

  5. 【LeetCode】036. Valid Sudoku

    题目: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...

  6. 洛谷【P1090】合并果子&&洛谷【P1334】瑞瑞的木板

    浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 合并果子题目传送门:https://www.luogu.org/problemnew/show/P1 ...

  7. jenkins pipline 用法收集

    1.下载多个项目 node { stage('clone'){ dir('test1'){ checkout([$class: 'GitSCM', branches: [[name: '*/maste ...

  8. HDOJ5044(最近公共祖先)

    #include<cstdio> #include<cstring> using namespace std; ; struct Edge{ int v,id,next; }e ...

  9. 使用swift命令遭遇503错误

    使用swift命令遭遇503 Internal Server Error.这个问题可能有很多种原因,这里只描述下我当前遇到的一种情况. 我们实验环境下的swift设有3个zone,有1个proxy n ...

  10. 三、kafka主要配置

      1.Broker配置 <ignore_js_op>      2.Consumer主要配置 <ignore_js_op>  3.Producer主要配置 <ignor ...