这题意思是有n个人,其中有m对朋友关系,其中不认识的两个人要成为朋友的条件是他们有至少k个共同的朋友,问最后能有多少对新朋友。
这题可以用图论解决,使用矩阵储存两个人之间的关系(1表示朋友关系,0表示不认识),然后遍历整个矩阵,寻找不认识的人的共同朋友,
并判断他们是否能成为新朋友,若能,则关系改为1,再重新遍历矩阵。
例如第一组样例可表示为;
| 0 1 2 3
-|--------
0| 0 1 1 0
1| 1 0 0 1
2| 1 0 0 1
3| 0 1 1 0
#include"stdio.h"
#include"string.h"
int main()
{
int m,aa,bb,n,i,j,k,h,t;
int a[100][100];
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
memset(a,0,sizeof(a));
for(i=0;i<m;i++)
{
scanf("%d%d",&aa,&bb);
a[aa][bb]=1;
a[bb][aa]=1;
}
int sum1=0,sum2=0;
while(1)
{
int s=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i!=j&&a[i][j]==0)
{
sum2=0;
for(h=0;h<n;h++)
{
if(a[i][h]&&a[j][h])
sum2++;
}
if(sum2>=k)
{
a[i][j]=1;
a[j][i]=1;
s++;
}
}
}
sum1+=s;
if(s==0)
break;
}
printf("%d\n",sum1);
}
return 0;
}