摘要:
题目链接:http://acm.buaa.edu.cn/problem/59/想法:由于要有最少的扇形来覆盖所有的点,点有哪么多,肯定是贪心算法,想到一个在一条直线上的很多点,要用最少区间去覆盖所有点,这个是贪心,只需要从最左边第一个点开始覆盖即可。 但这个题是平面上的,如何贪心? 这里想到由于必要有个扇形覆盖的起点,不可能每个都枚举,那个更可能?? 我的想法是:找到任意两个点间最大的间隔角度,起点从其中一个开始,就转换成直线上区间覆盖点的问题了。代码:#include#include#include#include#includeusing namespace std;const doub. 阅读全文
摘要:
题目链接:http://acm.buaa.edu.cn/problem/418/代码:#include#include#include#includeusing namespace std;const int maxn = 550;const int maxe = 5050;const int INF = 0x3f3f3f3f;int pa[maxn];int find(int x){ return x == pa[x] ? x : pa[x] = find(pa[x]);}struct Edge{ int u,v,w; bool operator rhs.w; }}... 阅读全文