HDU 6150 Vertex Cover 构造

来源:互联网 发布:淘宝女童秋装 编辑:程序博客网 时间:2024/06/06 04:46

传送门:HDU6150


以上来自:点击打开链接

想了很久都不明白贪心的做法为什么一定把右边的当做解,重新看了一眼题,发现

if (deg[i] >= mx) {          mx = deg[i];            u = i;        }
注意是>=,也就是说,度数相等的情况下选择较大的编号,而我们构造的图中右边的编号又一定大于左边的。。

这样做出来假设左边有n个点,右边会有nlogn个点,我们要保证nlogn > 3n。

代码:

#include<bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3fusing namespace std;typedef pair<int,int> P;const int MAXN = 100010;P p[MAXN];int main(){/*int sum = 0;for(int i = 1; i <= 30; i++)sum += 30 / i;cout << sum;*/int l = 30, r = 31, cnt = 0;for(int i = 1; i <= l; i++){for(int j = 1; j + i <= l + 1; j += i){for(int k = j; k < j + i; k++)p[cnt++] = P(k, r);r++;}}printf("%d %d\n", r - 1, cnt);for(int i = 0; i < cnt; i++)printf("%d %d\n", p[i].first, p[i].second);printf("%d\n", 30);for(int i = 1; i <= l; i++)printf("%d\n", i); return 0;}

原创粉丝点击