32. 限号

Description

小七所在的城市人口已经膨胀的不行了,当地交通到了不管不行的地步。当地政府新出台了一项全新的限号政策,对于某段区的公路,当天限制只有尾号为 但是马上就要国庆了,小七怎么能按耐住想浪一回的心情呢,他备选了 的形式,表示想从始发地同时小七还从交通官网上查询到了十一当天的限号情况,都是

#include <stdio.h>
int father[1000][105];
int m;
//查找函数
int Find(int x, int y)
{
	while(father[x][y]!=x)
		x=father[x][y];
 
	return x;
}
//合并函数
void combine(int a,int b, int c)
{
    int temp_a,temp_b;
	temp_a=Find(a, c);
	temp_b=Find(b, c);
    
	if(temp_a!=temp_b)
		father[temp_a][c]=temp_b;
}
//确定连通分量个数
int find_ans(int u, int v)
{
    int ans = 0;
    for (int i = 1; i <= m; i++){
        if(Find(u, i) == Find(v, i)){
            ans++;
        }
    }
    return ans;
}
 
int main()
{
    int n, a, b, c, k, u, v;
    scanf("%d%d",&n,&m);
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            father[i][j] = i;
    for (int i = 0; i < m; i++)
    {
        scanf("%d%d%d", &a, &b, &c);
        combine(a, b, c);
    }
    scanf("%d", &k);
    for (int i = 0; i < k; i++){
        scanf("%d%d", &u, &v);
        printf("%d\n", find_ans(u, v));
    }
        /*
	while(scanf("%d",&n)!=EOF)
	{
	    if(!n)  break;
		Init(n);
		scanf("%d",&m);
 
		for(i=0;i<m;++i)
		{
			scanf("%d%d",&a,&b);
			combine(a,b);
		}
		printf("%d\n",find_ans(n)-1);
	}
    */
        return 0;
}
 

猜你喜欢

转载自blog.csdn.net/weixin_41207175/article/details/85256484