Cod sursa(job #466340)

Utilizator cristian9Cristian Zloteanu cristian9 Data 26 iunie 2010 13:10:31
Problema Colorare3 Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 0.98 kb
#include<stdio.h>
int v[100001], fol[100001], e[100001], n, k, p, max, z;

struct vector{
	int a; int b;
};

void perm(int poz){
	int i;
	if(poz==n){
		for(i=1; i<n; i++){
		//	printf("%d ", v[i]);
		}
		//printf("\n");
		p++;
	}
	else{
		for(i=1; i<=k; i++){
			if(fol[i]==0){
				v[poz]=i;
				fol[i]=1;
				perm(poz+1);
				fol[i]=0;
			}
		}
	}
}

int main(){
	freopen ("colorare3.in", "r", stdin);
	freopen ("colorare3.out", "w", stdout);
	int j, m;
	vector u[100001];
	
	scanf("%d %d ", &n, &k);
	
	for(j=1; j<n; j++){
		scanf("%d %d ", &u[j].a, &u[j].b);
		e[u[j].a]++; e[u[j].b]++;
	}
	
	for(j=1; j<n; j++){
		if(e[j]>=max){
			max=e[j];
		}
	}
	
	if(max==n-1){
		perm(1);
	}
	else{
		m=n;
		n=max+1;
		perm(1);
		//printf("%d\n", p);
		for(j=1; j<=n; j++){
			if(e[j]!=max && e[j]>1){
				z++;
			}
		}
		//printf("%d ", z);
		if(z==1){
			p=p*(k-1);
		}
		else{
			p=p*(k-1)*(k-1);
		}
	}
	
	printf("%d ", p);
	return 0;
}