Отримання знань
дистанційна підтримка освіти школярів
Входные данные
Выходные данные
Пример входных данных
Пример выходных данных
Анализ условия и обсуждение идеи решения
Пример решения на C++:
#include < cstdio >
#include < iostream >
#include < algorithm >
#define MAXN 30
using namespace std;
char graph[MAXN+1][MAXN+1];
int cnt[2];
int n,m;
int sign(int x)
{
if(x==0)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int i,j,k,s,minimum;
n=0;
while(scanf("%d",&i)!=EOF)
{
scanf("%d",&m);
for(k=0; k < m; k++)
{
scanf("%d",&j);
graph[i][j]=graph[j][i]=1;
}
n=max(n,i);
}
minimum=1000000000;
for(i=(1 << n)-1; i >= 0; i--)
{
m=cnt[0]=cnt[1]=0;
for(j=0; j < n; j++)
{
s=sign(i&(1 << j));
if(s!=0)
{
m++;
}
for(k=0; k < n; k++)
{
if((k!=j) && (graph[k][j]==0) && (s==sign(i&(1 << k))))
{
cnt[s]++;
break;
}
}
}
if(m == (n >> 1))
{
minimum=min(minimum,min(cnt[0],cnt[1]));
}
}
printf("%d\n",minimum);
return 0;
}
Попередня | Зміст | Наступна |