HDU 6150 - Vertex Cover | 2017 中国大学生程序设计竞赛 - 网络选拔赛
思路来自 ICPCCamp
/* HDU 6150 - Vertex Cover [ 构造 ] | 2017 中国大学生程序设计竞赛 - 网络选拔赛 题意: 给了你一个贪心法找最小覆盖的算法,构造一组数据,使得这个程序跑出的答案是正解的三倍以上 分析: 构造一个二分图,左边 n 个节点 将左边的点进行 n 次分块,第 i 次分 n/i 块,每块的大小为 i,对于每一块都在右边建一个新的节点和这一块所有的点相连 则右边有 nlogn个节点,且每次一定优先选右边,最后取 nlogn >= 3n */ #include <bits/stdc++.h> using namespace std; typedef pair<int, int> P; const int m = 80; int n; vector<P> ans; void init() { n = m; for (int i = 1; i <= m; i++) for (int j = 0; j < m/i; j++) { n++; for (int k = 1; k <= i; k++) ans.push_back(P(n, i*j+k)); } } int main() { init(); printf("%d %d\n", n, ans.size()); for (auto & x : ans) printf("%d %d\n", x.first, x.second); printf("%d\n", m); for (int i = 1; i <= m; i++) printf("%d\n", i); }
我自倾杯,君且随意