这题难点建图。

       建图方式如下:要是在给定的s时间内能跑到洞穴(判断两点距离),那么那两个点是连通的,否则就不连通

 

#include<iostream>
using namespace std;

const int MAX = 300;

struct coordinate
{
	double x,y;
};

coordinate gopher[MAX];
coordinate holes[MAX];

bool arcs[MAX][MAX];
bool isvisit[MAX];
int match[MAX];
int n, m, s, v;

bool find(int u)
{
	for (int i = 1; i <= m; i++)
		if (arcs[u][i] && !isvisit[i])
		{
			isvisit[i] = true;
			if (!match[i] || find(match[i]))
			{
				match[i] = u;
				return true;
			}
		}

	return false;
}

int main()
{
	while (cin >> n >> m >> s >> v)
	{
		double d = s*v*s*v;
		for (int i = 0; i < n; i++)
			cin >> gopher[i].x >> gopher[i].y;

		for (int i = 0; i < m; i++)
			cin >> holes[i].x >> holes[i].y;

		memset(arcs, false, sizeof(arcs));
		memset(match, 0, sizeof(match));
		for (int i = 0; i < n; i++)
			for (int j = 0; j < m; j++)
				if ((holes[j].x - gopher[i].x)*(holes[j].x - gopher[i].x) + (holes[j].y - gopher[i].y)*(holes[j].y - gopher[i].y) <= d)
					arcs[i+1][j+1] = true;

		int ans = 0;
		for (int i = 1; i <= n; i++)
		{
			memset(isvisit, false, sizeof(isvisit));
			if (find(i))
				ans++;
		}

		cout << n - ans << endl;
	}
	return 0;
}

相关文章:

  • 2021-09-30
  • 2022-01-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-30
  • 2021-10-13
  • 2021-11-19
  • 2021-06-03
相关资源
相似解决方案