牛客國慶集訓派對Day4I-連通塊計數
阿新 • • 發佈:2018-12-16
題解: 分兩種情況 1.包含根節點 對於每一條鏈,鏈的末端與根節點相連,構成了一個迴路,每一條鏈有a[i]個點,那麼就有在這條鏈選0個、選1個、選2個…選a[i]個,共a[i]+1種情況, 要構成連通子樹,必須得是相連的,就是根-1,根-1-2,根-1-2-3…這樣的情況,不可能直接選中途的1-2這樣 2.不包含根節點 對於每一條鏈,有a[i]個節點,那麼這條鏈能形成的子樹個數是。 因為沒跟根節點連線,就不能乘了,要加起來。
#include<bits/stdc++.h> #define ll long long using namespace std; const int mod=998244353,N=1e5+5; int n;ll a[N]; int main() { scanf("%d",&n); ll ans1=1,ans2=0; for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); ans1=ans1*(a[i]+1)%mod; ans2=(ans2+(a[i]+1)*a[i]/2)%mod; } printf("%lld\n",(ans1+ans2)%mod); return 0; }