码迷,mamicode.com
首页 > 其他好文 > 详细

luoguP5836 [USACO19DEC]Milk Visits S

时间:2020-06-17 09:15:59      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:并查集   bit   str   ret   out   code   生成树   math   main   

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

树上只有两种颜色,如果客人在经过的路径上有自己喜欢的颜色,则输出 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

标签:并查集   bit   str   ret   out   code   生成树   math   main   

原文地址:https://www.cnblogs.com/lukelmouse/p/13150160.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!