Pagini recente » Cod sursa (job #1937944) | Cod sursa (job #972094) | Cod sursa (job #2573484) | Cod sursa (job #2420026) | Cod sursa (job #23771)
Cod sursa(job #23771)
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
freopen("triplete.in","r",stdin);
freopen("triplete.out","w",stdout);
int n, m, *v[4097], deg[4097], x[65537], y[65537], i, cnt = 0, d1, d2;
scanf("%d%d", &n, &m);
for(i = 1; i <= m; ++i)
{
scanf("%d%d", &x[i], &y[i]);
++deg[x[i]];
++deg[y[i]];
}
for(i = 1; i <= n; ++i)
{
v[i] = new int[deg[i] + 1];
v[i][0] = 0;
}
for(i = 1; i <= m; ++i)
{
v[x[i]][++v[x[i]][0]] = y[i];
v[y[i]][++v[y[i]][0]] = x[i];
}
for(i = 1; i <= n; ++i)
{
sort(v[i] + 1, v[i] + deg[i] + 1);
}
for(i = 1; i <= m; ++i)
{
d1 = d2 = 1;
while(1)
{
if(v[x[i]][d1] == v[y[i]][d2])
{
++cnt;
if(d1 < deg[x[i]] && d2 < deg[y[i]])
{
++d1;
++d2;
}
else
{
break;
}
}
else if(v[x[i]][d1] > v[y[i]][d2])
{
if(d2 < deg[y[i]])
++d2;
else
break;
}
else
{
if(d1 < deg[x[i]])
++d1;
else
break;
}
}
}
cnt /= 3;
printf("%d\n", cnt);
return 0;
}