Pagini recente » Cod sursa (job #220129) | Cod sursa (job #1775091) | Cod sursa (job #2146880) | Cod sursa (job #2811989) | Cod sursa (job #20186)
Cod sursa(job #20186)
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
const int B = 30;
const int maxn = 5097;
const int nel = maxn / B + 3;
int muchii[75537][2];
int leg[maxn+2][nel];
int lsb ( int x )
{
return ( (x-1)^x )&x;
}
int n,m;
int ntrip;
int main()
{
int i,a,b,j,k;
freopen("triplete.in","r",stdin);
freopen("triplete.out","w",stdout);
scanf("%d %d\n", &n, &m);
for ( i = 0; i < m; i++ )
{
scanf("%d %d\n", &a, &b);
muchii[i][0] = a;
muchii[i][1] = b;
if ( b % B == 0 )
leg[ a ][ b/B - 1 ] += ( 1 << B );
else
leg[ a ][ b/B + 1] += ( 1 << ( b%B ) );
if ( a % B == 0 )
leg[ b ][ a/B - 1 ] += ( 1 << B );
else
leg[ b ][ a/B + 1] += ( 1 << ( a%B ) );
}
for ( i = 0; i < m; i++ )
{
for ( j = 1; j <= n/B+1; j++ )
{
leg[ maxn + 1 ][j] = leg[ muchii[i][0] ][j] & leg[ muchii[i][1] ][j];
while ( leg[ maxn + 1 ][j] )
{
leg[ maxn + 1 ][ j ] -= lsb( leg[ maxn + 1 ][ j ] );
ntrip++;
}
}
}
printf("%d\n", ntrip/3);
fclose(stdin);
fclose(stdout);
return 0;
}