C++算法算法训练第十二天
以下为牛客挑战
今日收获
[code]知道了小根堆的写法priority_queueq;用于小根堆,每次直接用top()取,得到里面最小的。问图中有多少个连续的子集0001100我们只需要取判断,s!=s[i+1]的个数就行了。我们可以看到一共有3个。费马小定理求逆元。ksm(2,mod-2,mod)---》2的-1次方。组合数学 for(int i=2;i t; while (t--)#define TESTconst int N=2e5+10,M=1e3+10,mod=1e9+7;int a[N],b[N],c[N],pre[N];void solve(){ int n; cin>>n; string s,s1; cin>>s>>s1; for(int i=0;i>v; g.push_back(v); g[v].push_back(u); } int ans=0; auto dfs=[&](auto &&self,int u,int fa,int s,int dep)->void{ s*=ksm(g.size(),mod-2,mod); s%=mod; if(u>1){ ans+=s*dep%mod; ans%=mod; } for(auto &v:g){ if(v==fa)continue; self(self,v,u,s,dep+1); } s*=g.size();//回溯 s%=mod; }; dfs(dfs,1,0,1,1); cout |