Codeforces Round #286 (Div. 2), problem: (B) Mr. Kitayuta's Colorful Graph 【二维并查集】

题意

首行给出N和M,代表有N个点。接下来有M行,每行三个数字A,B,C,代表A到B有颜色为C的绳(也可以是线,随便是什么吧)。接着给出Q,代表Q次询问。接下来Q行,每行给出A和B,只有相同颜色的绳才可以把AB联通,问联通AB的绳子一共有多少种

思路

二维并查集,多了一个权值

code

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=200;
int n,m;
int fa[maxn][maxn];
int findFa(int x,int w){
    if(x!=fa[x][w])
        fa[x][w]=findFa(fa[x][w],w);
    return fa[x][w];
}
void join(int a,int b,int c){
    int x=findFa(a,c);
    int y=findFa(b,c);
    if(x!=y)
        fa[x][c]=y;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            fa[i][j]=i;
    for(int i=0;i<m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        join(a,b,c);
    }
    cin>>n;
    while(n--){
        int ans=0;
        int u,v;
        cin>>u>>v;
        for(int i=1;i<=m;i++){
            if(findFa(u,i)==findFa(v,i))
                ++ans;
        }
        cout<<ans<<endl;
    }
    return 0;
}
学如逆水行舟,不进则退
发布了422 篇原创文章 · 获赞 984 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_42429718/article/details/104115761