Cod sursa(job #466286)

Utilizator cahemanCasian Patrascanu caheman Data 26 iunie 2010 12:48:57
Problema Colorare3 Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 0.88 kb
#include<stdio.h>
int d[1001];
int a[1001],b[1001];
long k,n;
long permut(long a)
{
long long b=1,i;
for(i=2;i<=a;i++)
 b=(b*i)%1000000007;
return b;
}
long comb(int a)
{
long long b=1,i;
if(a==0)
 return 1;
for(i=k-a;i>=1;i--)
 b=(b*i)%1000000007;
return b;
}
int main()
{
freopen("colorare3.in","r",stdin);
freopen("colorare3.out","w",stdout);
long long i,nr=1,ad,l;
scanf("%ld%ld",&n,&k);
for(i=1;i<=n-1;i++)
 {
 scanf("%ld%ld",&a[i],&b[i]);
 d[a[i]]++;
 d[b[i]]++;
 }
for(i=1;i<=n;i++)
 if(d[i]>k)
  {
  printf("0\n");
  return 0;
  }
for(i=1;i<=n;i++)
 {
 ad=0;
 for(l=1;l<=n-i;l++)
  if((a[l]==i&&b[l]<i)||(b[l]==i&&a[l]<i))
   ad++;
 if(ad==0)
  nr=(nr*permut(d[i]))%1000000007;
 else
  {
  ad=0;
  for(l=1;l<=n-1;l++)
   if((a[l]==i&&b[l]>i)||(b[l]==i&&a[l]>i))
    ad++;
  nr=(nr*comb(ad))%1000000007;
  }
 }
printf("%ld\n",nr);
return 0;
}