题目链接:http://codeforces.com/problemset/problem/505/B点击打开链接
数据量很小 可以用并查集 主要就是构造每个颜色的并查集 这样才能区别每个地点是否与上一个地点相连
#include <bits/stdc++.h>
using namespace std;
#define maxn 200
int pre[maxn][maxn];
int findx(int col,int x)
{
int r=x;
while(pre[col][r]!=r)
{
r=pre[col][r];
}
int i=x;int j;
while(pre[col][i]!=r)
{
j=pre[col][i];
pre[col][i]=r;
i=j;
}
return r;
}
void join (int col,int x,int y)
{
int p1=findx(col,x);
int p2=findx(col,y);
if(p1!=p2)
{
pre[col][p2]=p1;
}
}
int judge(int col,int x,int y)
{
if(findx(col,x)!=findx(col,y))
return 0;
else
return 1;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
pre[i][j]=j;
for(int i=0;i<m;i++)
{
int mid1,mid2,mid3;
scanf("%d%d%d",&mid1,&mid2,&mid3);
join(mid3,mid1,mid2);
}
int t=0;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
int mid1,mid2;
scanf("%d%d",&mid1,&mid2);
int ans=0;
for(int i=1;i<=m;i++)
ans+=judge(i,mid1,mid2);
printf("%d\n",ans);
}
}