1013. Battle Over Cities (25)

#include <iostream>
#include <vector>

using namespace std;

int tree[1010], sum[1010];

void init(int n)
{
	int i;
	for(i = 1; i <= n; i++)
	{
		tree[i] = -1;
		sum[i] = 1;
	}
}

int findroot(int root)
{
	if(tree[root] == -1)
	{
		return root;
	}
	else
	{
		tree[root] = findroot(tree[root]);
		return tree[root];
	}
}

int getrootcount(int n)
{
	int i, count = 0;
	for(i = 1; i <= n; i++)
	{
		if(tree[i] == -1)
		{
			count++;
		}
	}

	return count;
}

void buildrelation(int index[2])
{
	int i;
	for(i = 0; i <= 1; i++)
	{
		index[i] = findroot(index[i]);
	}

	int index0 = index[0], index1 = index[1];
	if(index0 != index1)
	{
		if(sum[index1] > sum[index0])
		{
			index0 = index[1];
			index1 = index[0];
		}

		tree[index1] = index0;
		sum[index0] += sum[index1];
	}
}

int main()
{
	int n, m, k;
	scanf("%d%d%d", &n, &m, &k);

	int i, a, b;
	vector<int> v[1010];

	for(i = 1; i <= m; i++)
	{
		scanf("%d%d", &a, &b);

		v[a].push_back(b);
		v[b].push_back(a);
	}

	int cur, j, size, p, index[2];
	for(i = 1; i <= k; i++)
	{
		scanf("%d", &cur);

		init(n);
		for(j = 1; j <= n; j++)
		{
			if(j != cur)
			{
				size = v[j].size();
				index[0] = j;

				for(p = 0; p < size; p++)
				{
					index[1] = v[j][p];

					if(index[1] != cur)
					{
						buildrelation(index);
					}
				}
			}
		}

		printf("%d\n", getrootcount(n) - 2);
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-23 16:55  王景迁  阅读(5)  评论(0)    收藏  举报

导航