[关闭]
@Falsyta 2015-08-04T10:17:28.000000Z 字数 630 阅读 1440

mxh带窝补省选

OI 省选 mxh带窝飞


HEOI2015

兔子与樱花

出师不利

从下向上贪心合并。

时间复杂度O(NlogN)

  1. # include <cstdio>
  2. # include <algorithm>
  3. using namespace std;
  4. # define REP(i, n) for (int i = 1; i <= n; i ++)
  5. const int NR = 2001000;
  6. pair <int, int> a[NR];
  7. int deg[NR], bg[NR], c[NR], n, m, ans;
  8. # define v a[bg[x] + i].second
  9. void DFS (int x)
  10. {
  11. REP (i, deg[x]) DFS (v);
  12. REP (i, deg[x]) a[bg[x] + i] = make_pair (c[v], v);
  13. sort (a + bg[x] + 1, a + bg[x] + deg[x] + 1);
  14. REP (i, deg[x]) if (c[x] + c[v] - 1 <= m) c[x] += c[v] - 1, ans ++;
  15. }
  16. int main ()
  17. {
  18. scanf ("%d%d", &n, &m);
  19. REP (i, n) scanf ("%d", &c[i]);
  20. int sz = 0, t1;
  21. REP (i, n)
  22. {
  23. scanf ("%d", &deg[i]), bg[i] = sz, c[i] += deg[i];
  24. REP (j, deg[i]) scanf ("%d", &t1), a[sz + j] = make_pair (0, t1 + 1);
  25. sz += deg[i];
  26. }
  27. DFS (1);
  28. printf ("%d\n", ans);
  29. return 0;
  30. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注