Pagini recente » Cod sursa (job #1529324) | Cod sursa (job #2308689) | Cod sursa (job #289728) | Cod sursa (job #39503) | Cod sursa (job #8443)
Cod sursa(job #8443)
#include <stdio.h>
#include <vector>
#include <set>
#include <iterator>
#include <string>
using namespace std;
#define in "triplete.in"
#define out "triplete.out"
#define dim 4096
#define dr 65536
typedef struct nod {
int vf;
nod *next;
} *PNOD;
PNOD graph[dim];
int arb[2][dr];
int n, m;
bool sel[dim];
void Add(int i, int j)
{
PNOD q = new nod;
q->vf = i;
q->next = graph[j];
graph[j] = q;
}
//vector< set<int> > p; intersanta chestiune :P
int main()
{
int x, y;
int nr=0;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &n, &m);
/* a.resize(n+1);
for ( int i = 1; i <= n; i++ )
a[i].resize(n+1);*/
for ( int i = 1; i <= m; i++ )
{
scanf("%d%d",&x,&y);
//a[y][x] = a[x][y] = 1;
Add(x,y);
Add(y,x);
arb[0][i] = x;
arb[1][i] = y;
}
for ( int i = 1; i <= m; i++ )
{
memset(sel,0,sizeof(sel));
x = arb[0][i];
y = arb[1][i];
for ( PNOD q = graph[x]; q; q=q->next ) sel[q->vf] = 1;
for ( PNOD q = graph[y]; q; q=q->next )
if ( sel[q->vf] == 1 ) nr++;
}
/*for ( int i = 1; i <= m; i++ )
{
x = arb[0][i];
y = arb[1][i];
//for ( int j = 1; j <= n; j++ )
{
if ( a[x][j] == 1 && a[y][j] == 1 )
{
// if ( !sel[y][x][j] )
{
nr += 1;
//sel[y][x][j] = sel[y][j][x] = sel[x][y][j] = sel[x][j][y] = sel[j][y][x] = sel[j][x][y] = 1;
}
}
}
}*/
printf("%d",nr/3);
}