Cod sursa(job #52309)

Utilizator scapryConstantin Berzan scapry Data 18 aprilie 2007 16:04:41
Problema Triplete Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#include <assert.h>
#include <bitset>
using namespace std;

enum { maxn = 4096, maxe = 65536 };

bitset<maxn> ad[maxn], work;
int n, e;
int edge[maxe][2];
int ans;

int main()
{
	int i;
	FILE *f = fopen("triplete.in", "r");
	if(!f) return 1;

	fscanf(f, "%d%d", &n, &e);
	for(i = 0; i < e; i++)
	{
		fscanf(f, "%d%d", &edge[i][0], &edge[i][1]);
		edge[i][0]--;
		edge[i][1]--;

		ad[ edge[i][0] ][ edge[i][1] ] = true;
		ad[ edge[i][1] ][ edge[i][0] ] = true;
	}

	fclose(f);
	f = fopen("triplete.out", "w");
	if(!f) return 1;

	for(i = 0; i < e; i++)
	{
		printf("edge %d - %d\n", edge[i][0], edge[i][1]);
		work = ad[ edge[i][0] ] & ad[ edge[i][1] ];
		printf("+= %d\n", work.count());
		ans += work.count();
	}
	
	assert(ans % 3 == 0);
	ans /= 3;

	printf("ans %d\n", ans);

	fprintf(f, "%d\n", ans);
	fclose(f);
	return 0;
}