Pagini recente » Cod sursa (job #2493810) | Cod sursa (job #2713400) | Cod sursa (job #3233252) | Cod sursa (job #2324902) | Cod sursa (job #509576)
Cod sursa(job #509576)
#include <cstdio>
#include <algorithm>
using namespace std;
#define MOD 1000000007
#define DIM 100005
long long n, k;
struct muc
{
long long u, v;
friend bool operator < (const muc &a,const muc &b)
{
if (a.u < b.u) return true;
else
if ((a.u == b.u) && (a.v < b.v)) return true;
return false;
}
} muchii[DIM];
struct ar
{
long long n, k;
} A[DIM];
void read()
{
FILE *f = fopen("colorare3.in", "r");
fscanf(f, "%lld%lld", &n, &k);
for (long long m = 0, i = 1, x, y; i <= n-1; ++i)
{
fscanf(f, "%lld%lld", &x, &y);
muchii[++m].u = x;
muchii[m].v = y;
muchii[++m].u = y;
muchii[m].v = x;
}
fclose(f);
}
int main()
{
read();
sort(muchii + 1, muchii + 2*n - 2);
long long i, j, sarite, count = 0;
/*
for (int i = 1; i <= 2*(n-1); ++i)
printf("%d %d\n", muchii[i].u, muchii[i].v);
printf("||--------||\n");
*/
for (long long q = 1; q <= 2*(n-1); ++q)
{
i = muchii[q].u;
sarite = 0;
for (j = q; j <= 2*(n-1) && muchii[j].u == i; ++j)
if (muchii[j].u > muchii[j].v)
++sarite;
if (k - sarite != k-j+q)
{
A[++count].n = k - sarite;
A[count].k = k-j+q;
// printf("i=%d %d %d\n",count, A[count].n, A[count].k);
}
q = j-1;
}
long long rez =1, a;
for (long long i = 1; i <= count; ++i) //PLM!
{
a = 1;
for (j = A[i].k+1; j <= A[i].n; ++j)
a = (a*j)%MOD;
rez = (rez*a)%MOD;
}
FILE *f = fopen("colorare3.out", "w");
fprintf(f, "%lld\n", rez);
fclose(f);
return 0;
}