题意
首行给出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;
}
学如逆水行舟,不进则退