0%

CF-1028-D. Gellyfish and Camellia Japonica(直接构造等于难,构造最小的大于等于)

思路讲解

https://www.luogu.com.cn/article/rae0b6wl

总体思路就是将等于目标转变为构造最小的 大于等于目标的构造

1
2
3
4
5
6
ROF(i,Q,1){
ll x=Op[i][0],y=Op[i][1],z=Op[i][2];
C[x]=max(C[x],C[z]);
C[y]=max(C[y],C[z]);
if(x!=z && y!=z) C[z]=0;
}

既然是要被覆盖的,我们还要构造最小的吗,所以我们令

AC代码

https://codeforces.com/contest/2115/submission/323143930

心路历程(WA,TLE,MLE……)

https://codeforces.com/contest/2115/submission/322643402

比最大条件小的点是不被允许的,那么填什么最好呢?

https://codeforces.com/contest/2115/submission/322665243

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
10 10
4 3 8 4 2 4 4 4 4 2
9 6 8
7 1 4
2 5 5
8 1 8
7 4 6
9 7 8
6 8 8
8 4 5
9 10 5
3 1 9

附随机数据生成器

https://www.cnblogs.com/cjcf/p/18906536

给出最后的结果和操作步骤,求初始数组

通过贪心,我们发现在A[x]有多条边的时候,只能选择满足最大的边(条件,边权为A[z]大小)

比最大条件小的点是不被允许的,那么我们就要看是就选这个最大条件还是选自己的值(如果自己的值比最大条件大)。

贪心的来说,如果自己的值是要被覆盖的,那么肯定选条件值,如果不被覆盖,那肯定就选自己的值。

当然,上面的这些只针对于不是多重覆盖的情况,如果出现多重覆盖情况,那么只保留最后覆盖情况(前面覆盖了也是白覆盖)。

那么我们发现,我们小瞧了这道题目,就是说操作之间是有可能互相影响的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
10 10
4 3 8 4 2 4 4 4 4 2
9 6 8
7 1 4
2 5 5
8 1 8
7 4 6
9 7 8
6 8 8
8 4 5
9 10 5
3 1 9

当然,我们发现我们的贪心结论是没有什么大的问题的,只是适用范围错了,其仅在倒推时,不涉及传递的时候有用。