結果

問題 No.3412 Christmas Tree Coloring
コンテスト
ユーザー yuusaan
提出日時 2025-11-16 09:28:47
言語 C++23
(gcc 13.3.0 + boost 1.89.0)
結果
AC  
実行時間 151 ms / 2,000 ms
コード長 898 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,964 ms
コンパイル使用メモリ 278,632 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-12-18 23:30:22
合計ジャッジ時間 6,431 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
#include <atcoder/modint>
using namespace std;
using mint = atcoder::modint998244353;
int mod = 998244353;
using ll = long long;

//べき乗の計算を高速で行う関数。本問題において必須ではないが、持っておくと便利。
ll modPow(ll a, ll n, ll mod){
    if(mod==1) return 0;
    ll ret = 1; 
    ll p = a % mod; 
    while(n){
        if(n & 1)ret = ret * p % mod;
        p = p * p % mod; 
        n >>= 1;
    }
    return ret;
}

int main(){
    int N; cin >> N;
    vector<int> K(N);//次数

    for(int i = 0; i < N-1; i++){//辺の受け取り
        int a,b; cin >> a >> b;
        a--,b--;
        K[a]++,K[b]++;
    }

    mint ans = 0;
    for(int i = 0; i < N; i++){
        ans += modPow(2,K[i],mod);
        if(K[i] == N-1)ans -= 2;//ウニグラフの場合の例外処理
    }

    cout << ans.val() << endl;
    return 0;
}
0