题解:AT_ndpc2026_b DAG
题意概述:
给你
不难发现这道题是 ndpc 的题,于是考虑 dp。
设
为了让 dp 满足无后效性,我们进行如上转移时,必须保证
具体来说,初始把所有入度为
最终答案即为
问:为什么一定能得到
答:因为这是有向无环图,所以它一定有完整的拓扑序,也就一定可以得到
问:为什么初始要把所有入度为
答:不行。虽然只有
下面是代码时间!
const int N=200001,mod=998244353;
int n,m,du[N],f[N];
//du[i]为i的入度,f[i]为i的f值
vector<int> son[N];
//son[x]存储以x为出发点的边所到达的点y
inline void topsort()
{
queue<int> q;
for(int i=1;i<=n;i++) if(!du[i]) q.push(i);
while(q.size())
{
int x=q.front();
q.pop();
for(auto y:son[x])
{
(f[y]+=f[x])%=mod;
if(!--du[y]) q.push(y);
}
}
}
inline void solve()
{
n=read(),m=read();
for(int i=1;i<=n;i++) du[i]=f[i]=0,son[i].clear(); //多测要清空
for(int i=1,x=0,y=0;i<=m;i++)
{
x=read(),y=read();
son[x].push_back(y),du[y]++;
}
f[1]=1,topsort();
print(f[n]),putchar('\n');
}
int main()
{
for(int T=read();T;T--) solve();
return 0;
}