Submission #1260230
Source Code Expand
#include <unistd.h> #include <vector> const int mod = 1000000007; typedef long long int ll; std::vector<int> g[1000]; char ibuf[20000]; char *ibufe = ibuf-1; void readall(){ int k, t = 0; while((k=read(STDIN_FILENO, ibuf+t, sizeof(ibuf)-t))>0) t += k; } int read_uint(){ int x=0; while(*(++ibufe) <'0'); do { x *= 10; x += *ibufe-'0'; } while(*(++ibufe) >='0'); return x; } char buf[20]; char *bufe = buf; void write_uintln(int x){ int i; static char tmp[13]; if(x==0){ *bufe++ = '0'; *bufe++ = '\n'; return; } for(i=0; x; i++){ tmp[i] = '0' + x % 10; x /= 10; } for(i--; i >= 0; i--){ *bufe++ = tmp[i]; } *bufe++ = '\n'; } extern inline void writeall(){ int k, t = 0; while((k=write(STDOUT_FILENO, buf+t, bufe-buf-t))>0) t += k; } struct prop { int num; int val; }; int fact[1001]; int ifact[1001]; int iv[1001]; prop dp[1000]; int modpow(int n, int k){ int r = 1; while(k){ if(k&1) r = (ll) r * n % mod; k >>= 1; n = (ll) n * n % mod; } return r; } int inv(int x){ return modpow(x, mod-2); } void dfs(int x, int p){ dp[x].num=1; dp[x].val=1; for(auto c: g[x]){ if(c != p){ dfs(c, x); dp[x].val = (ll) dp[x].val * iv[dp[c].num] % mod * dp[c].val % mod; dp[x].num += dp[c].num; } } } void dfs2(int x, int p){ int b = dp[p].num - dp[x].num; dp[x].val = (ll) dp[p].val * dp[x].num % mod * iv[b] % mod; dp[x].num += b; for(auto c: g[x]){ if(c != p){ dfs2(c, x); } } } int main(){ int n, ans; fact[0] = 1; for(int i=1;i<=1000;i++){ fact[i] = (ll) i * fact[i-1] % mod; iv[i] = inv(i); } ifact[1000] = inv(fact[1000]); for(int i=999;i>=0;i--){ ifact[i] = (ll) (i+1) * ifact[i+1] % mod; } readall(); n = read_uint(); for(int i=0;i<n-1;i++){ int a, b; a = read_uint(); b = read_uint(); g[a-1].push_back(b-1); g[b-1].push_back(a-1); } dfs(0, -1); iv[0] = iv[dp[0].num]; dfs2(0, 0); ans = 0; for(int i=0;i<n;i++){ ans = (ans + (ll) dp[i].val * fact[dp[i].num-1]) % mod; } write_uintln((int) ((ll) ans*ifact[2]%mod)); writeall(); return 0; }
Submission Info
Submission Time | |
---|---|
Task | N - 木 |
User | ryuhei |
Language | C++14 (GCC 5.4.1) |
Score | 5 |
Code Size | 2332 Byte |
Status | AC |
Exec Time | 1 ms |
Memory | 384 KB |
Judge Result
Set Name | All | ||
---|---|---|---|
Score / Max Score | 5 / 5 | ||
Status |
|
Set Name | Test Cases |
---|---|
All | 00, 01, 02, 03, 04, 05, 06, 90, 91 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00 | AC | 1 ms | 384 KB |
01 | AC | 1 ms | 256 KB |
02 | AC | 1 ms | 256 KB |
03 | AC | 1 ms | 256 KB |
04 | AC | 1 ms | 256 KB |
05 | AC | 1 ms | 256 KB |
06 | AC | 1 ms | 256 KB |
90 | AC | 1 ms | 256 KB |
91 | AC | 1 ms | 256 KB |