比赛用并查集怼了半天,发现没办法找到4个不同的数,没做出来,刚刚看了题解,就是个脑洞题。。。。。。炸了,还有,估计以后只能做uva了
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn=100000+10; int a[maxn],b[maxn]; struct note { int x,y; }tt[maxn]; int t,m,n,p; int main() { scanf("%d",&t); while(t--) { scanf("%d%d%d",&m,&n,&p); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(int i=0;i<p;i++) { scanf("%d%d",&tt[i].x,&tt[i].y); a[tt[i].x]++; b[tt[i].y]++; } long long int ans=0; for(int i=0;i<p;i++) ans+=(long long)(a[tt[i].x]-1)*(b[tt[i].y]-1);//出现次数减去这次的连接次数,也就是1,男女都减,这是最神奇的地方 printf("%lld\n",ans*2); } return 0; }
时间: 2024-10-12 14:13:29