POJ 3020 Антенна Размещение самой большой матч

Антенна Размещение
Лимит времени: 1000 мс   Лимит памяти: 65536K
Всего Материалы: 6445   Принято: 3182

Описание

Научно-исследовательский центр Global Aerial был выделена задачей построения пятого поколения телефонных сетей мобильной связи в Швеции. Наиболее яркая причина, почему они получили работу, их открытие нового, высоко шума устойчивости, антенны. Это называется 4DAir, и поставляется в четырех типов. Каждый тип может только передавать и принимать сигналы в направлении, выровненное с (слегка перекошенной) широтной и продольной сеткой, из-взаимодействующего электромагнитного поля Земли. Четыре типа соответствуют антенны, работающие в направлениях север, запад, юг и восток, соответственно. Ниже приведен пример картина достопримечательностей, изображенных на двенадцать маленьких колец и девять 4DAir антенн изображены эллипсами, покрывающих их.

Очевидно, что желательно использовать как несколько антенн, как это возможно, но по-прежнему обеспечивает покрытие для каждого места интереса. Мы моделировать эту проблему следующим образом: Пусть А прямоугольная матрица, описывающая поверхность Швеции, где вхождение А либо является точкой интереса, который должен быть покрыт, по меньшей мере, одной антенной, или пустым пространством. Антенны могут быть расположены только на входе в A. Когда антенна помещается в строке г и столбце С, эта запись считается покрыта, но и одним из соседних записей (с + 1, г), (с, г + 1 ), (с-1, г), или (с, г-1), покрыт в зависимости от типа выбранного для этой конкретной антенны. Какое наименьшее количество антенн для которых существует размещения в А такой, что все точки интереса покрыты?



вход

На первой строке ввода является единственным положительным целым числом N, указав количество сценариев, которые следуют. Каждый сценарий начинается с строкой, содержащей два целых числом положительной ч и ш, с 1 <= H <= 40 и 0 <W <= 10. После этого матрица представлена, описывающие точки интереса в Швеции в виде х линий, каждая из которых содержит W символов из множества [ «*», «о»]. А «*» - символ символизирует точку интереса, в то время как «блуждающий символ представляет открытое пространство.

Выход

Для каждого сценария, выведите минимальное количество антенн необходимо, чтобы охватить все «*» - записи в матрице к сценарию, по ряду своих собственных.

Пример ввода

2 
7 9 
ооо оооо ** 
** ооо оо * 
или * да ** или ** 
ooooooooo 
******* оо 
о * * о * оо оо 
******* да 
10 1 
* 
* 
* 
или 
* 
* 
* 
* 
* 
*

Пример вывода

17 
5


Нет покрытия для минимального пути двудольного графа Вершины = - половина максимального количества матчей / 2

#include<iostream>
#include<cstring>
using namespace std;

#define M 405
int a[M][M],b[M][M];
int p;
int v[M],f[M];
int w[4][2]={0,1,0,-1,1,0,-1,0};

int fi(int x)
{
	for(int i=1;i<=p;i++)
		if(!v[i] && b[x][i])
		{
			v[i]=1;
			if(!f[i] || fi(f[i]))
			{
				f[i]=x;
				return 1;
			}
		}
	return 0;
}

int main()
{
	int T;
	cin>>T;getchar();
	while(T--)
	{		
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(f,0,sizeof(f));
		int n,m;
		cin>>n>>m;
		int i,j;
		char c;

		p=0;
		for(i=1;i<=n;i++)
		{
			for(j=1;j<=m;j++)
			{
				cin>>c;
				if(c=='*')
					a[i][j]=++p;
			}
			getchar();
		}

		for(i=1;i<=n;i++)
			for(j=1;j<=m;j++)
				if(a[i][j])   for(int q=0;q<4;q++)
				{
					int x=i+w[q][0];
					int y=j+w[q][1];
					if(a[x][y])
						b[a[i][j]][a[x][y]]=1;
				}

		int sum=0;
		for(i=1;i<=p;i++)
		{
			memset(v,0,sizeof(v));
			if(fi(i))   sum++;
		}
		
		cout<<p-sum/2<<endl;
	}

	return 0;
}


рекомендация

отwww.cnblogs.com/mqxnongmin/p/10960669.html