pro:给定N个点,M条边,现在你要给一些连通块加边,使得至少存在一个连通块的大小是由4和7组成的数字。问至少加边数量。

sol: 看似一个很难的题目。  首先不要想太难了,还是应该想能不能用背包做。 我们把块的大小相同的分到一组,就可以分组背包了。 然后注意到组别的大小其实不会太大,因为1*1+2*2+3*3+4*4+x*x<=1e5;   x是1e2级别的。 所以做100次多重背包。 总的复杂度也才O(100*N*K),K是个比较小的常数,真正的复杂度小于这个;

  1. #include<bits/stdc++.h>
  2. #define rep(i,a,b) for(int i=a;i<=b;i++)
  3. using namespace std;
  4. const int maxn=;
  5. int fa[maxn],num[maxn],sum[maxn];
  6. int dp[maxn],N;
  7. int find(int x)
  8. {
  9. if(fa[x]==x) return x;
  10. return fa[x]=find(fa[x]);
  11. }
  12. void pack(int v,int now)
  13. {
  14. for(int i=N;i>=v;i--){
  15. dp[i]=min(dp[i-v]+now,dp[i]);
  16. }
  17. }
  18. void solve(int v,int x)
  19. {
  20. int now=;
  21. while(now<x){
  22. pack(v*now,now);
  23. x-=now;
  24. now*=;
  25. }
  26. if(x) pack(v*x,x);
  27. }
  28. bool check(int x){
  29. int tx=x;
  30. while(x){
  31. int t=x%;
  32. if(t!=&&t!=) return false;
  33. x/=;
  34. }
  35. return true;
  36. }
  37. int main()
  38. {
  39. int M,v,u,fu,fv;
  40. scanf("%d%d",&N,&M);
  41. rep(i,,N) num[i]=,fa[i]=i;
  42. rep(i,,M){
  43. scanf("%d%d",&u,&v);
  44. fu=find(u);
  45. fv=find(v);
  46. if(fu!=fv) num[fu]+=num[fv],fa[fv]=fu;
  47. }
  48. rep(i,,N) {
  49. fu=find(i);
  50. if(fu==i) sum[num[fu]]++;
  51. }
  52. rep(i,,N) dp[i]=N+M+;
  53. rep(i,,N)
  54. if(sum[i]) solve(i,sum[i]);
  55. int res=N+M+;
  56. rep(i,,N)
  57. if(check(i)) res=min(dp[i],res);
  58. if(res==N+M+) puts("-1");
  59. else printf("%d\n",res-);
  60. return ;
  61. }

CodeForces - 95E: Lucky Country (多重背包)的更多相关文章

  1. 95E Lucky Country

    传送门 题目大意 如果一个数中不包含除4和7之外的数字则是幸运数.有n个岛屿,通过双向道路连接.这些岛屿被分为几个地区.每个岛属于恰好一个区域,同一区域中的任何两个岛之间存在道路,不同区域的任何两个岛 ...

  2. Codeforces 106 C 多重背包

    题目链接:http://codeforces.com/problemset/problem/106/C 根据题意列出式子,设每种蛋糕做了xi个,则对于每种材料bi*xi<=ai. 对于dough ...

  3. Educational Codeforces Round 61 (Rated for Div. 2) E 多重背包优化

    https://codeforces.com/contest/1132/problem/E 题意 有8种物品,重量是1~8,每种数量是\(cnt[i]\)(1e16),问容量为W(1e18)的背包最多 ...

  4. codeforces 755F F. PolandBall and Gifts(贪心+多重背包)

    题目链接: F. PolandBall and Gifts time limit per test 1.5 seconds memory limit per test 256 megabytes in ...

  5. Codeforces 755 F. PolandBall and Gifts 多重背包+贪心

    F. PolandBall and Gifts   It's Christmas time! PolandBall and his friends will be giving themselves ...

  6. HDU 3591 (完全背包+二进制优化的多重背包)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3591 The trouble of Xiaoqian Time Limit: 2000/1000 M ...

  7. HDU_3591_(多重背包+完全背包)

    The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  8. 洛谷P1782 旅行商的背包[多重背包]

    题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件.他的背包体积是C.怎样装才能 ...

  9. HDU 2082 找单词 (多重背包)

    题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...

随机推荐

  1. spark笔记 环境配置

    spark笔记 spark简介 saprk 有六个核心组件: SparkCore.SparkSQL.SparkStreaming.StructedStreaming.MLlib,Graphx Spar ...

  2. openshift 使用curl命令访问apiserver

    openshift版本:openshift v3.6.173.0.5 使用oc(同kubectl)命令访问apiserver资源的时候,会使用到/root/.kube/config文件中使用的配置. ...

  3. Access to XMLHttpRequest at 'http://127.0.0.1:8000/XXXXX' from origin 'http://localhost

    Django 报错,跨域请求出现问题. 在settings.py中添加 #设置可跨域范围 CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = T ...

  4. 74HC573锁存器应用(附英文手册)

    锁存器(LATCH)概念 锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态. 锁存,就是把信号暂存以维持某种电平状态. 锁存器作用: 缓存 完成高速的控 ...

  5. linux tomcat开机自启/nginx开机自启

    修改/etc/rc.d/rc.local文件,修改完成后需执行以下指令才能正常自启动 chmod +x /etc/rc.d/rc.local #!/bin/bash # THIS FILE IS AD ...

  6. git 学习笔记 ---解决冲突

    人生不如意之事十之八九,合并分支往往也不是一帆风顺的. 准备新的feature1分支,继续我们的新分支开发: $ git checkout -b feature1 Switched to a new ...

  7. C# vb .net实现装饰边框效果滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的装饰边框效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...

  8. win10 mars xlog编译

    win10 mars xlog编译   一. 环境准备 安装 cmake 以及 python2.7, 以及下载 ndk-r16b,并配置环境变量 NDK_ROOT 指向 ndk 路径. 如果是 Win ...

  9. 2019 映客直播java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.映客直播等公司offer,岗位是Java后端开发,最终选择去了映客直播. 面试了很多家公司,感觉大部分公司考察的点 ...

  10. react-router4的使用备注

    1.安装 react-router是核心库,在项目中不需要安装,web开发只需安装react-router-dom.native开发安装react-router-native. 2.url参数携带与获 ...