Cod sursa(job #2235708)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 26 august 2018 20:35:22
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

#define NMAX 4100 
#define MMAX 66000

ifstream fin("triplete.in");
ofstream fout("triplete.out");

vector <int> la[4100];
queue <int> q,qc,q2;

int n,m,sol=0;


//BFS cu un control inteligent 

void BFS(int i){
	if(q.empty())return;
/*	q2=q;
	while(!q2.empty()){
		cout<<q2.front()<<' ';
		q2.pop();
	}
	cout<<'\n';*/
	if(qc.front()<=2){
		int l=la[q.front()].size();
		for(int j=0;j<l;j++){
			if((la[q.front()][j]>q.front() && qc.front()<2) || (la[q.front()][j]==i && qc.front()==2)){
				qc.push(qc.front()+1);
				q.push(la[q.front()][j]);
			}	
		}
		if(q.empty())return;
		else{
			q.pop();
			qc.pop();
		} 
		BFS(i);
		if(q.empty())return;		
	}else{
		while(!q.empty()){
			if(q.front()==i)sol++;
			q.pop();
			qc.pop();
		}
		return;
	}
}


int main(){
	cin>>n>>m;
	for(int i=0;i<m;i++){
		int a,b;
		fin>>a>>b;
		la[a].push_back(b);
		la[b].push_back(a);
	}
	
	for(int i=1;i<=n;i++)
	{	//cout<<i<<" :\n"; 
		int l=la[i].size();
		for(int j=0;j<l;j++){
			if(la[i][j]>i){
				q.push(la[i][j]);
				qc.push(1);
			}
		}
		if(!q.empty())BFS(i);
	}
	fout<<sol;
	return 0;
}