Cod sursa(job #125396)

Utilizator mastermageSchneider Stefan mastermage Data 20 ianuarie 2008 12:46:45
Problema Strazi Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasele 11-12 Marime 1.03 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

#define maxN 300

struct str{int v;str*n;str(int pv,str*pn){v=pv,n=pn;}};
  
int n,m,res,pred[maxN],gr[maxN],viz[maxN];
int mad[maxN][maxN];
str*lad[maxN];

void inputFunc(){
	FILE*fi=fopen("strazi.in","r");
	fscanf(fi,"%d %d",&n,&m);
	
	for(int i=1;i<=n;i++)lad[0]=new str(i,lad[0]);
	gr[0]=n;pred[0]=-1;
	
	for(int i=0;i<m;i++){
		int a,b;
		fscanf(fi,"%d %d",&a,&b);
		lad[a]=new str(b,lad[a]);
		mad[a][b]=1;
	}
	fclose(fi);
}

void back(){
	int per[maxN],mp[maxN],res=100000;
	for(int i=0;i<n;i++)per[i]=i+1;
	
	do{
		int cur=0;
		for(int i=1;i<n;i++)if(!mad[per[i-1]][per[i]])cur++;
		if(cur<res)res=cur,memcpy(mp,per,sizeof mp);
	}while(next_permutation(per,per+n));
	
	
	FILE*fi=fopen("strazi.out","w");
	fprintf(fi,"%d\n",res);
	for(int i=1;i<n;i++)if(!mad[mp[i-1]][mp[i]])fprintf(fi,"%d %d\n",mp[i-1],mp[i]);
	for(int i=0;i<n;i++)fprintf(fi,"%d ",mp[i]);
	fclose(fi);
}

int main(){
	inputFunc();
	
	back();
	
	
	return 0;
}