BZOJ1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
<div class="post_brief"><p> 在一道usaco的题上wa了三次。我也是厉害。</p> 其实好像有简单做法的。不过我是要脑补一下曼哈顿最小生成树。 对于一个平面图上的点的曼哈顿最小生成树,一定存在一种方案,使得每个点的度数至多为8。也就是说以斜率为0,inf,1,-1的四条直线分出来的八个区域里各有一个点就行了。然后是可以保证的。 于是就是拿俩树状数组扫四遍就行了。 #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; const int inf = 0x3f3f3f3f; struct point { int x, y, i; point() { x = -inf, y = -1; } point(int xo, int yo) { x = xo, y = yo; } inline void init(int ix) { scanf("%d%d", &x, &y); i = ix; } }; inline bool operator <(const point& a, const point& b) { return (a....