結果
問題 | No.2047 Path Factory |
ユーザー |
👑 ![]() |
提出日時 | 2022-08-19 21:57:12 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 144 ms / 2,000 ms |
コード長 | 1,223 bytes |
コンパイル時間 | 2,203 ms |
コンパイル使用メモリ | 204,284 KB |
最終ジャッジ日時 | 2025-01-31 01:03:29 |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll=long long; const ll mod=998244353; #define rep(i,a) for (ll i=0;i<a;i++) void solve(); // oddloop int main() { int t=1; //cin>>t; rep(i,t) solve(); } void solve(){ int N; cin>>N; vector<vector<int>> G(N); rep(i,N-1){ int a,b; cin>>a>>b; a--,b--; G[a].push_back(b); G[b].push_back(a); } vector<int> pare(N,-1),order={0}; pare[0]=-2; for(int i=0;i<N;i++){ int a=order[i]; for(auto x:G[a]){ if(pare[x]==-1){ pare[x]=a; order.push_back(x); } } } vector<vector<ll>> dp(N,vector<ll>(4)); for(int i=N-1;i>=0;i--){ int a=order[i]; dp[a][1]=1; //ll X=1,Y=1,Z=1,W=0; for(auto x:G[a]){ if(pare[x]!=a) continue; ll tmp1=(dp[x][1]+dp[x][2])%mod; ll tmp2=(dp[x][0]+dp[x][3])%mod; dp[a][3]=((dp[a][3]*tmp2)%mod+(dp[a][0]*tmp1)%mod)%mod; dp[a][0]=((dp[a][0]*tmp2)%mod+(dp[a][1]*tmp1)%mod)%mod; dp[a][1]=(dp[a][1]*tmp2)%mod; } dp[a][2]=dp[a][0]; //vec_out(dp[a]); } cout<<(dp[0][0]+dp[0][3])%mod<<"\n"; }