Cod sursa(job #8026)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 23 ianuarie 2007 17:57:05
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
// Misto ideea cu eliminarea...
// complexitate O(M)...
#include <cstdio>
#include <vector>

using namespace std;

#define PB push_back

const int NMAX = 4096;

int N, M;
vector <int> G[NMAX];
int GR[NMAX];

void read() {
	FILE *fin = fopen("triplete.in", "rt");
	int i, u, v;

	fscanf(fin, " %d %d", &N, &M);

	for (i = 0; i < M; ++i) {
		fscanf(fin, " %d %d", &u, &v);
		--u, --v;
		++GR[u], ++GR[v];
		G[u].PB(v), G[v].PB(u);
	}

	fclose(fin);
}

void write() {
	FILE *fout = fopen("triplete.out", "wt");
	long long cnt;
	int i;
	unsigned j;

	cnt = (long long) N * (N - 1) * (N - 2) / 6;

	for (i = 0; i < N; ++i) {
		cnt -= GR[i] * (N - i - 1 - GR[i]);
		
		for (j = 0; j < G[i].size(); ++j)
			--GR[ G[i][j] ];
	}

	fprintf(fout, "%lld\n", cnt);

	fclose(fout);
}

int main() {

	read();

	write();

	return 0;
}