luoguP5836 [USACO19DEC]Milk Visits S

Posted lukelmouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luoguP5836 [USACO19DEC]Milk Visits S相关的知识,希望对你有一定的参考价值。

题目是一颗生成树,所以路径唯一

树上只有两种颜色,如果客人在经过的路径上有自己喜欢的颜色,则输出 1,否则输出 0

可以用并查集来把相同的颜色合并起来。

(a,b) 颜色相同,(col[a]!=c) 路上全是客人不喜欢的颜色,输出 0

(a,b) 颜色相同,(col[a]==c) ,路上全是客人喜欢的颜色,输出 1

(a,b) 颜色不同,那么说明这条路肯定经过两种颜色,那么客人喜欢的颜色一定在其中,输出 1

并查集
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int fa[N],str[N*3],n,m;
char col[N];
int find(int x) {
    if(fa[x] != x) return fa[x] = find(fa[x]);
    return x;
}
void merge(int a,int b) {
    fa[find(a)] = find(b);
}
int main() {
    cin >> n >> m;
    for(int i = 1;i <= n; ++i) {
        fa[i] = i;
        cin >> col[i];
    }
    for(int i = 0;i < n - 1; ++i) {
        int a,b;cin >> a >> b;
        if(col[a] == col[b]) merge(a,b);
    }
    for(int i = 0;i < m; ++i) {
        int a,b;
        char c;
        cin >> a >> b >> c;
        if(find(a) == find(b) && col[a] != c) str[i] = 0;
        else str[i] = 1;
    }
    for(int i = 0;i < m; ++i) cout << str[i];
    return 0;
}

以上是关于luoguP5836 [USACO19DEC]Milk Visits S的主要内容,如果未能解决你的问题,请参考以下文章

luoguP3128 [USACO15DEC]最大流Max Flow 题解(树上差分)

[luoguP2870] [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold(后缀数组)

[luoguP2854] [USACO06DEC]牛的过山车Cow Roller Coaster(DP + sort)

luogu P3110 [USACO14DEC]驮运Piggy Back

LuoguP3038/[USACO11DEC]牧草种植Grass Planting树链剖分+树状数组树状数组的区间修改与区间查询

[luogu P3065] [USACO12DEC]第一!First!