题意:每对朋友公共点达到k时才能持久,求能持久的朋友数;
思路:统计两点之间的点数,当公共点数达到k时朋友对数加1,且当前两不相邻节点间新建一条边;
#include <stdio.h>
#include <string.h>
int main()
{
int t,n,m,k,x,y,ans,sum,i,j,l,flag;
int map[101][101];
scanf("%d",&t);
while (t--)
{
scanf("%d%d%d",&n,&m,&k);
memset(map,0,sizeof(map));
while (m--)
{
scanf("%d%d",&x,&y);
map[x][y]=map[y][x]=1;
}
ans=0;
while (1) {
flag=0;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
if (i==j || map[i][j]==1) continue;
sum=0;
for (l=0;l<n;l++)
if (i!=l && j!=l)
{
if (map[i][l]==1 && map[l][j]==1) sum++;
if (sum>=k) { flag=1; break;} }
if (sum>=k) { ans++; map[i][j]=map[j][i]=1; } }
if (flag==0) break; }
printf("%d\n",ans); }
return 0;
}