제출 #1323839

#제출 시각아이디문제언어결과실행 시간메모리
1323839SoulKnightStar Trek (CEOI20_startrek)C++20
0 / 100
1 ms332 KiB
#include "bits/stdc++.h"
using namespace std;
#define ln '\n'

#define int long long

const int MOD = 1e9 + 7;

enum{WIN, LOSS};

void dfs(int u, int p, vector<int>& state,
            const vector<vector<int>>& adj){

                state[u] = LOSS;
                for (auto v: adj[u]){
                    if (v == p) continue;
                    dfs(v, u, state, adj);
                    if (state[v] == LOSS) state[u] = WIN;
                }
            }

int binpow(int base, int e){
    int res = 1;
    while (1){
        if (e & 1) res = (res * base) % MOD;
        if (e <= 1) break;
        base = (base * base) % MOD;
        e /= 2;
    }
    return res;
}

void solve(){
    int n, k; cin >> n >> k;
    vector<vector<int>> adj(n+1);

    for (int i = 0; i < n-1; i++){
        int u, v; cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    int w, l; w = l = 0;
    vector<int> state(n+1);
    dfs(1, -1, state, adj);

    for (int i = 1; i <= n; i++){
        if (state[i] == WIN) w++;
        else l++;
    }

    int z = binpow(n, k-1);
    array<int,2> res;
    if (k & 1){
        res = {z * l, z * w};
    } else {
        res = {z * w, z* l};
    }

    int ans;
    if (state[1] == LOSS){
        ans = res[WIN] * l % MOD;
    } else {
        ans = (res[WIN] + res[LOSS]) * w % MOD;
        ans += res[WIN] * l % MOD;
    }

    ans %= MOD; ans += MOD; ans %= MOD;

    cout << ans << ln;
}


signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int _ = 1;
    // cin >> _;
    while (_--) solve();

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...