「PKUWC2018」随机游走 题解
前言
好题,这个待定系数真的好用!
思路
说实话,看见这道题的第一反应真不是什么
但是既然都放在链接里面了,那我们就勉为其难的向这方面思考一下吧。
首先直接通过这个容斥转化题意,也就是说,我们只需要求得,对于任意一个点的集合
具体来说,从
定义
如果
但是显然,这样的转移是有后效性的。
一种比较暴力的想法是,把所有的式子列出来,然后高斯消元,复杂度为
我们考虑一个新式的
我们发现,这个式子是齐次的(且是一次的),而且必然可以通过高斯消元得到一个
我们可以通过这个假设,将转移式子中的
于是,我们有:
可以发现,
求出每个
代码
#include <bits/stdc++.h>
using namespace std;
#define maxn 20
#define mod 998244353
int ksm(int x, int y)
{
int sum = 1;
while(y)
{
if(y & 1) sum = 1ll * sum * x % mod;
y >>= 1, x = 1ll * x * x % mod;
}
return sum;
}
int inv(int x)
{
return ksm(x, mod - 2);
}
int n, q, x;
int fst[maxn], cnt;
struct node
{
int tar, nxt;
}arr[maxn << 1];
void adds(int x, int y)
{
arr[++cnt].tar = y, arr[cnt].nxt = fst[x], fst[x] = cnt;
}
bool belong[maxn];
int k[maxn], b[maxn];
int sum[1 << (maxn - 2)], ans[1 << maxn];
void dfs(int x, int last)
{
if(belong[x]) return;
int sumk = 0, sumb = 0, deg = 1;
if(last == 0) deg--;
for (int i = fst[x]; i; i = arr[i].nxt)
{
int j = arr[i].tar;
if(j == last) continue;
dfs(j, x);
sumk += k[j], sumb += b[j], deg++;
sumk %= mod, sumb %= mod;
}
k[x] = 1ll * inv(((deg - sumk) % mod + mod) % mod);
b[x] = 1ll * (deg + sumb) % mod * inv(((deg - sumk) % mod + mod) % mod) % mod;
}
int Cnt[1 << maxn];
void init()
{
for (int i = 1; i < (1 << n); ++i)
{
Cnt[i] = __builtin_popcount(i);
memset(belong, 0, sizeof(belong));
memset(k, 0, sizeof(k));
memset(b, 0, sizeof(b));
for (int j = 1; j <= n; ++j) if(i & (1 << j - 1)) belong[j] = true;
dfs(x, 0);
sum[i] = b[x] * (Cnt[i] & 1 ? 1 : -1);
sum[i] = (sum[i] % mod + mod) % mod;
}
for (int j = 1; j <= n; ++j)
{
for (int i = 0; i < (1 << n); ++i)
{
if(!(i & (1 << j - 1)))
sum[i + (1 << j - 1)] += sum[i], sum[i + (1 << j - 1)] %= mod;
}
}
}
int main()
{
cin >> n >> q >> x;
for (int i = 1; i < n; ++i)
{
int x, y;
cin >> x >> y;
adds(x, y);
adds(y, x);
}
init();
while(q--)
{
int m, now = 0;
cin >> m;
for (int i = 1; i <= m; ++i)
{
int x;
cin >> x;
now |= 1 << x - 1;
}
printf("%d\n", sum[now]);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】