URAL 1272 Non-Yekaterinburg Subway (查并集)

#include<stdio.h>

#define MAX_ISLANDS (10000 + 1)
#define MAX_TUNELS (12000 + 1)
#define MAX_BRIDGES (12000 + 1)

struct CONNECTION{
	int oneIsland;
	int anotherIsland;
};
CONNECTION connectionArray[MAX_TUNELS + MAX_BRIDGES];
int connectionNum;
int islands;
int tunels;
int bridges;
int belongTo[MAX_ISLANDS];

int findBelongTo(int island){
	if (island == belongTo[island])
		return island;
	belongTo[island] = findBelongTo(belongTo[island]);
	return belongTo[island];
}

int connect(int oneIsland, int anotherIsland){
	int oneBelongTo = findBelongTo(oneIsland);
	int anotherBelongTo = findBelongTo(anotherIsland);
	if (oneBelongTo != anotherBelongTo){
		belongTo[oneBelongTo] = anotherBelongTo;
		return 1;
	}
	return 0;
}

int main(){
	scanf("%d %d %d", &islands, &tunels, &bridges);

	int island;
	for (island = 1; island <= islands; island++)
		belongTo[island] = island;

	int oneIsland, anotherIsland;
	int tunel;
	for (tunel = 1; tunel <= tunels; tunel++){
		scanf("%d %d", &oneIsland, &anotherIsland);
		connect(oneIsland, anotherIsland);		
	}

	int minBridges = 0;
	int bridge;
	for (bridge = 1; bridge <= bridges; bridge++){
		scanf("%d %d", &oneIsland, &anotherIsland);
		if (connect(oneIsland, anotherIsland))
			minBridges++;
	}

	printf("%d", minBridges);
	return 0;
}


 
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值