由于d很小,所以可以把每个点拆成d个点,然后对于边(x,y),连边时连接((x,i),(y,i+1))及((x,d),(y,1)).然后可以对这样连的边跑一遍tarjan缩点.然后直接暴力DP即可.不过当时比赛时不知道为什么一直写挂然后掉分了,后来发现用vector特别占用内存,要改成邻接表写. #include<bits/stdc++.h> using namespace std; ; ],e2[N*]; ],hd2[N*],val[N*],bel[N*],dfn[N*],low[N*],h…