题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6016
【思路分析】首先要想组成A-B-C-D这个形式的四个人,而且每两个相邻的人是不能是同一性别、所以我们可以枚举B,那么我们暂且假设B是一个男性,那么A肯定是一个女性,C也肯定是一个女性,因为A和C都是B的朋友,所以A的选择有B的朋友数-1种可能,D有C的朋友数-1种可能(原因同上),再加上这个序列反过来也成立,所以结果要*2。所以我们只要枚举已知的关系就行了。
【AC代码】
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<queue>
#include<stack>
using namespace std;
#define LL long long
LL a[100005],b[100005],u[100005],v[100005];
int main()
{
LL t,n,m,k;
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld%lld",&n,&m,&k);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(LL i=1;i<=k;i++)
{
scanf("%lld%lld",&u[i],&v[i]);
a[u[i]]++;
b[v[i]]++;
}
LL sum=0;
for(LL i=1;i<=k;i++)
{
sum+=2*(a[u[i]]-1)*(b[v[i]]-1);
}
printf("%lld\n",sum);
}
return 0;
}