这是本文档旧的修订版!
由于long long的问题T了两次。
呜呜~
在经历了一堆错误的思考后,我发现只需要维护度为1的点或者子树就行了,这些树有两种状态,一种是根节点没有匹配,另一种是根节点已经被匹配,维护数量就可以了。
WA是因为思路不对。
只需要算出打一个怪你至少需要打几次就可以了。很简单,但是我很愚蠢。
WA是因为longlong和整除的情况。
做过一个有点类似的题,虽然事后怎么找都找不到qAq(一开始根本没看题,等到有队伍过了才发现QAQ,应该早点看到QAQ~
首先使用dp(或者说就是一个简单的标记数组)记录点1,1和n,m能到达的所有点。
由于每次往右或者往下所以 i+j 总是增加1,因此把所有点按 i+j 分类。只有一个点的类是不能删掉的。
对于多个点的类,不同类的第一个和最后一个点一定是联通的(这个不知道怎么证,但多举几个例子就会发现)
然后根据这个性质枚举 i+j 对于每个 i+j 枚举其后面的对角线,在从两端往中间枚举 i 找到合适的点。