#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#include <stdlib.h>
#include <stdio.h>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
int FriendList[31][31];
int divide[31];
int StudentNum;
int strangeNum(int wboy, int demo[])
{
int i = 0;
int j = 0;
int lone = 0;
for (i = 1; i <= demo[0]; i++)
{
if (wboy == demo[i])
continue;
for (j = 1; j <= FriendList[demo[i]][0]; j++)
{
if (wboy == FriendList[demo[i]][j])
break;
}
if (j > FriendList[demo[i]][0])
lone++;
}
return lone;
}
void exchangeValue(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void buildClass(int demo[], int flag)
{
int i = 0;
int j = 0;
for (i = 1; i <= StudentNum; i++)
{
if (divide[i] == flag)
demo[++j] = i;
}
demo[0] = j;
}
int calcLone(int demo[])
{
int i = 0;
int lone = 0;
for (i = 1; i <= demo[0]; i++)
{
lone = max(lone, strangeNum(demo[i], demo));
}
return lone;
}
int Lone()
{
int class1[31];
int class2[31];
buildClass(class1, 1);
buildClass(class2, 0);
return max(calcLone(class1), calcLone(class2));
}
int divideClass(int now, int max)
{
int wlone = 30;
int i = 0;
if (now == max)
return Lone();
else
{
wlone = min(wlone, divideClass(now + 1, max));
for (i = now + 1; i <= max; i++)
{
if (divide[i] != divide[max])
{
exchangeValue(÷[i], ÷[max]);
wlone = min(wlone, divideClass(i, max));
exchangeValue(÷[i], ÷[max]);
}
}
return wlone;
}
}
int main()
{
int i = 0;
int j = 0;
int wCount = 0;
int lone = 0;
while (1)
{
if (EOF == scanf("%d", &j))
break;
scanf("%d", &wCount);
FriendList[j][0] = wCount;
StudentNum++;
for (i = 1; i <= wCount; i++)
{
scanf("%d", &FriendList[j][i]);
}
wCount = 0;
}
for (i = 1; i <= (StudentNum / 2); i++)
{
divide[i] = 1;
}
lone = divideClass(1, StudentNum);
printf("%d\n", lone);
return 0;
}
poj 1081
最新推荐文章于 2024-09-27 11:17:47 发布