\(突破口是n<=7,注意到这个你就成功了一半\)
\(当n<=6,每个点上放一个不同数字\)
\(这样一个点最多往外连5条边,而不管以什么数字开头,都有6种这样的筛子\)
\(比如11,12,13,14,15,16\)
\(这种情况m条边都可以放上筛子\)
\(当n==7,那么第七个点数字必然和前面某一个点相同\)
\(当两个相同数字的点连向同一个点时,有一条边是放不了的\)
\(比如两个点数字都是2,都和数字3的点相连,那么这两条边都只能放23\)
\(所以我们枚举相同的两个点计算最大答案\)
#include <bits/stdc++.h>
using namespace std;
int n,m,ans,dp[8][8];
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int l,r;
cin>>l>>r;
dp[l][r]=dp[r][l]=1;
}
if(n<=6) cout<<m;
else
{
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
int res=0;
for(int k=1;k<=n;k++)
if(dp[i][k]&&dp[j][k]) res++;
ans=max(ans,m-res);
}
cout<<ans;
}
}