题目链接
做法
先把题意理解清楚,然后手算一下样例。
可以发现每个$(x,y,z)$的原材料可以看做二维平面上的一个点$(x,y)$,因为第三维与前两维的和是定制,所以可以省略。
但是第三维也并不是完全没用,有了第三维的限制,两个点组合能够表示的点就在这两个点连结所形成的线段上。
根据上面的结论,那么显然多个点能表示的点就在这些点围成的凸包内。
所以我们相当于从$n$个点中选出尽量少的点,使得这些点围成的凸包能够包括所有后面的m个点。
由于数据范围很小,我们枚举$n$个点中的两个点$i$和$j$,如果$m$个点均在线段$ij$的逆时针侧,我们就让$i$向$j$连边,这样我们只要在最后得到图上跑一边floyd求最小环就行了。
判断是否在逆时针侧的话用叉积。
还要注意特判一下点恰好在这条线段上的情况,可以用点积判断夹角实现。
代码
1 |
|