Cod sursa(job #661545)

Utilizator johnny2008Diaconu Ion johnny2008 Data 14 ianuarie 2012 17:42:52
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.69 kb
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
#define pb push_back 
int n,m;
vector<int> vec[100001];
vector<int> vec1[100001];
vector<int> pr[100001];
int sol[500001];
int nrmuchii;
int ct=0;
bool viz[100001];
void prio(int nod,int tata,int care){
	viz[nod]=true;
	int i;
	int contor=0;
	for(i=0;i<vec1[nod].size();i++){
		
		if(vec1[nod][i]!=-1){
			if(vec1[nod][i]==tata){
				contor++;
				if(contor>=2){
					pr[tata][care]=1;
					pr[nod][i]=1;
					vec1[nod][i]=-1;
					vec1[tata][care]=-1;
					tata=-1;
				}
			}
			else{
				if(viz[vec[nod][i]]!=true)
				prio(vec1[nod][i],nod,i);
						
			}
		}
	}
	
}
void euler(int nod,int tata){
	if(nrmuchii<=0){}
	else{
	ct++;
	sol[ct]=nod;
	int i;
	
	for(i=0;i<vec[nod].size();i++){
		if(pr[nod][i]==1)
		if(vec[nod][i]!=-1){
			if(vec[nod][i]==tata){
				vec[nod][i]=-1;
				tata=-1;
			}
			else{
				nrmuchii--;
				int aux=vec[nod][i];
				vec[nod][i]=-1;
				euler(aux,nod);
			}
		}
	}
	for(i=0;i<vec[nod].size();i++){
		if(pr[nod][i]==0)
		if(vec[nod][i]!=-1){
			if(vec[nod][i]==tata){
				vec[nod][i]=-1;
				tata=-1;
			}
			else{
				nrmuchii--;
				int aux=vec[nod][i];
				vec[nod][i]=-1;
				euler(aux,nod);
			}
		}
	}
	}
}
int main(){
	ifstream f("ciclueuler.in");
	ofstream g("ciclueuler.out");
	f>>n>>m;
	int i,j;
	for(i=1;i<=m;i++){
		int a,b;
		f>>a>>b;
		vec[a].pb(b);
		vec[b].pb(a);
		vec1[a].pb(b);
		vec1[b].pb(a);
		pr[a].pb(0);
		pr[b].pb(0);
		
	}
	g<<"1";
	return 0;
	prio(1,-1,-1);
	
	nrmuchii=m;
	euler(1,-1);
	if(nrmuchii>0){
		g<<"-1";
	}
	else{
		for(i=1;i<=ct;i++){
			g<<sol[i]<<" ";
		}
	}
	return 0;
}