题意:
问在图中的边上可以找到多少不相同的四个点连起来的路径
思路:
对于每一条边,左节点外的节点数乘右节点外的节点数就是这条边作为中间线段可以形成的四点路径数
#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct node
{
int x,y;
};
struct node num[100100];
int n,m,k;
int deg[200010];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(deg,0,sizeof deg);
scanf("%d%d%d",&n,&m,&k);
int x,y;
for(int i=1;i<=k;i++)
{
scanf("%d%d",&x,&y);
y+=n;
deg[x]++;
deg[y]++;
num[i].x=x;
num[i].y=y;
}
ll ans=0;
for(int i=1;i<=k;i++)
{
ans+=(ll)(deg[num[i].x]-1)*(deg[num[i].y]-1);
}
printf("%lld\n",ans*2);
}
}