Pagini recente » Cod sursa (job #1495424) | Cod sursa (job #1575347) | Cod sursa (job #1016201) | Cod sursa (job #1107319) | Cod sursa (job #1140189)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int sol[40],n,i,j,k,x,y,t,m,rez;
vector<int>v[40];
bool viz[40][40];
bool ok(int x,int y)
{
for (int i=1;i<=y;i++) if (viz[sol[i]][x] || viz[x][sol[i]]) return false;
return true;
}
void back(int lungime)
{
rez=max(rez,lungime);
if (lungime==1)
{
for (int i=1;i<=n;i++)
if (ok(i,lungime))
{
sol[lungime]=i;
back(lungime+1);
sol[lungime]=0;
}
} else
for (int i=0;i<v[sol[lungime-1]].size();i++)
if (ok(v[sol[lungime-1]][i],lungime))
{
sol[lungime]=v[sol[lungime-1]][i];
back(lungime+1);
sol[lungime]=0;
}
}
int main()
{
freopen("alianta.in","r",stdin);
freopen("alianta.out","w",stdout);
scanf("%d",&t);
for (t;t>=1;t--)
{
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++) v[i].clear();
memset(viz,false,sizeof(viz));
for (i=1;i<=m;i++)
scanf("%d %d",&x,&y),viz[x][y]=viz[y][x]=true;
k=0;rez=0;
for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
if (!viz[i][j])
v[i].push_back(j);
back(1);
printf("%d\n",rez-1);
}
return 0;
}