Cod sursa(job #523690)

Utilizator cosmyoPaunel Cosmin cosmyo Data 18 ianuarie 2011 21:41:35
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 5000;
int n, m, NR, v[N], o[N], w[N];
vector <int>  a[N];

void DFS(int k) {
	int i, nr, nrq, r, j ;
	v[k] = 1;
	nr = 0;
	for(i = 0; i < a[k].size(); ++i)
		if(v[a[k][i]])
			o[++nr] = a[k][i];
//	printf("%d %d\n", k, nr);
	for(i = 0; i < a[k].size(); ++i)
		if(!v[a[k][i]]) {
			nrq = nr;
			for(j = 1; j <= nr; ++j)
				w[j] = o[j];
			for(j = 0; j < a[a[k][i]].size(); ++j)
				if(v[a[a[k][i]][j]] && a[a[k][i]][j] != k)
				 w[++nrq] = a[a[k][i]][j];
		
			sort(w + 1, w + nrq + 1);
			r = 0;
			for(j = 1; j < nrq; ++j)
				if(w[j] == w[j + 1])
					++r;
		//	printf("%d %d ",k, a[k][i]);
		//	for(j = 1; j <= nrq; ++j)
		//		printf("%d ", w[j]);
		//	printf("\n");
			NR += r;
			DFS(a[k][i]);
		}
	
}

int main() {
	freopen("triplete.in", "r", stdin);
	freopen("triplete.out", "w", stdout);
	int i, x, y;
	scanf("%d %d", &n, &m);
	for(i = 1; i <= m; ++i)
		scanf("%d %d", &x, &y), a[x].push_back(y), a[y].push_back(x);
	for(i = 1; i <= n; ++i)
		if(v[i] == 0)
			DFS(i);
	printf("%d \n", NR);
	return 0;
}