本体貌似不能最优性剪枝,经过一下午的对拍,拍出了下边的数据:
10 12 1
1000000000000000000 1000000000000000000 6 1000000000000000000 1 1 1 1 1
1 4
6 1
7 1
2 6
2 8
3 5
4 5
3 9
3 7
10 2
5 9
5 10
在这个数据中(应该和洛谷#5测试点相似),有的人的最优性剪枝对了,有的人的错了,我看了看,错的是链式前向星存图的面对的是vector存的,两个的顺序就是枚举顺序(前者先建的边后枚举,后者反之),所以我把vector代码的枚举顺序变成了这样:
for(auto i=v[x].end()-1;;i--){
if(!vs[*i])dfs(*i,l+1,w+va[*i]);
if(i==v[x].begin()) break ;
}
这样就过不去了,所以vector代码过去完全是因为数据水,故本题应该不能进行最优性剪枝