poj 2485 Highways

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define N 1000
int bing[N];
struct coord
{
	int x, y;
	int quan;
};
bool cmp(const coord a, const coord b)
{
	return a.quan < b.quan;
}
int search(int a)
{
	if (a == bing[a])
		return a;
	else
		return bing[a] = search(bing[a]);
}
bool getin(int a, int b)
{
	int t1, t2;
	t1 = search(a);
	t2 = search(b);
	if (t1 != t2)
	{
		bing[t1] = t2;
		return true;
	}
	return false;
}
int main()
{
	int i;
	cin >> i;
	while (i--)
	{
		int a, b, ge, quan;
		vector<coord> map;
		int sb;
		coord ak_47;
		int count = 0;
		scanf("%d", &ge);
		for (a = 1; a <= ge; a++)
		{
			bing[a] = a;
			for (b = 1; b <= ge; b++)
			{
				scanf("%d", &quan);
				if (quan != 0 && a > b)
				{
					ak_47.quan = quan;
					ak_47.x = a;
					ak_47.y = b;
					map.push_back(ak_47);
				}
			}
		}
		sort(map.begin(), map.end(), cmp);
		for (int a = 0; a != map.size(); a++)
		{
			//cout << map[a].quan << endl;
			if (getin(map[a].x, map[a].y))
			{
				count++;
				if (count == ge - 1)
					sb = map[a].quan;
			}
		}
		printf("%d\n", sb);
		//system("pause");
	}
}

一道最小生成樹的水題,很簡單就能做出來。題意就是找出來最小生成樹中的最大邊,需要注意的是對邊進行排序的時候注意不要排反了。

發佈了68 篇原創文章 · 獲贊 14 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章