3308: 九月的咖啡店

Time Limit: 30 Sec  Memory Limit: 128 MB
Submit: 244  Solved: 86

Description

深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事
我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这
里若干种兑在一起。不过有些原料不能同时在一杯中,如果两个编号
为i,j的原料,当且仅当i与j互质时,才能兑在同一杯中。
现在想知道,如果用这N种原料来调同一杯咖啡,使用的原料编号之和
最大可为多少。

Input

一个数字N

Output

如题

Sample Input

10

Sample Output

30

HINT

1<=N<=200000

Source

【分析】

  其实一开始也是认为每个质数自己搞成一个极大的数。

  后来也发现大于$\sqrt n$可能是有问题的。

  然后最i多只会有两个数,且一个大于$\sqrt n$,一个小于【这种东西还是靠胆量猜吧?或许可以证明?

  可以先每个质数自己搞成一个极大的数,然后建二分图,

    若a,b能配对

    a,b连边 权值Vab−Va−Vb

     【费用流ins也能打错的我。。

  1 #include<cstdio>
  2 #include<cstdlib>
  3 #include<cstring>
  4 #include<iostream>
  5 #include<algorithm>
  6 #include<queue>
  7 using namespace std;
  8 #define Maxn 200010
  9 #define Maxm 200010
 10 #define INF 0xfffffff
 11 #define LL long long
 12
 13 int mymin(int x,int y) {return x<y?x:y;}
 14
 15 struct node
 16 {
 17     int x,y,f,c,o,next;
 18 }t[Maxm*2];
 19 int first[Maxn],len;
 20
 21 int st,ed;
 22 void ins(int x,int y,int f,int c)
 23 {
 24     if(c<=0&&x!=st&&y!=ed) return;
 25     t[++len].x=x;t[len].y=y;t[len].f=f;t[len].c=c;
 26     t[len].next=first[x];first[x]=len;t[len].o=len+1;
 27     t[++len].x=y;t[len].y=x;t[len].f=0;t[len].c=-c;
 28     t[len].next=first[y];first[y]=len;t[len].o=len-1;
 29 }
 30
 31 queue<int > q;
 32 bool inq[Maxn];
 33 LL dis[Maxn],flow[Maxn];
 34 int pre[Maxn];
 35 bool bfs()
 36 {
 37     memset(inq,0,sizeof(inq));
 38     // memset(dis,63,sizeof(dis));
 39     for(int i=1;i<=ed;i++) dis[i]=-INF;
 40     while(!q.empty()) q.pop();
 41     q.push(st);dis[st]=0;flow[st]=INF;
 42     inq[st]=1;
 43     while(!q.empty())
 44     {
 45         int x=q.front();
 46         for(int i=first[x];i;i=t[i].next) if(t[i].f>0)
 47         {
 48             int y=t[i].y;
 49             if(dis[y]<dis[x]+t[i].c)
 50             {
 51                 dis[y]=dis[x]+t[i].c;
 52                 flow[y]=mymin(flow[x],t[i].f);
 53                 pre[y]=i;
 54                 if(!inq[y])
 55                 {
 56                     inq[y]=1;
 57                     q.push(y);
 58                 }
 59             }
 60         }
 61         q.pop();inq[x]=0;
 62     }
 63     return dis[ed]>-INF;
 64 }
 65
 66 LL sum;
 67 void max_flow()
 68 {
 69     while(bfs())
 70     {
 71         if(dis[ed]<0) return;
 72         sum+=flow[ed]*dis[ed];
 73         int x=ed;
 74         while(x!=st)
 75         {
 76             t[pre[x]].f-=flow[ed];
 77             t[t[pre[x]].o].f+=flow[ed];
 78             x=t[pre[x]].x;
 79         }
 80     }
 81 }
 82
 83 int n;
 84 LL pri[Maxn];int pl;
 85 LL as[Maxn];
 86 bool vis[Maxn];
 87 void init()
 88 {
 89     memset(vis,0,sizeof(vis));
 90     for(int i=2;i<=n;i++)
 91     {
 92         if(!vis[i]) pri[++pl]=i;
 93         for(int j=1;j<=pl;j++)
 94         {
 95             if(i*pri[j]>n) break;
 96             vis[i*pri[j]]=1;
 97             if(i%pri[j]==0) break;
 98         }
 99     }
100     for(int i=1;i<=pl;i++)
101     {
102         as[i]=pri[i];
103         while(as[i]*pri[i]<=n) as[i]*=pri[i];
104         sum+=as[i];
105     }
106     int i;
107     for(i=1;pri[i]*pri[i]<n&&i<=pl;i++)
108      for(int j=pl;pri[j]*pri[j]>=n;j--)
109      {
110          int x=pri[i]*pri[j];
111          if(x>n) continue;
112          while(x*pri[i]<=n) x*=pri[i];
113          ins(i,j,1,x-as[i]-as[j]);
114      }
115     st=pl+1;ed=st+1;
116     for(int i=1;pri[i]*pri[i]<n&&i<=pl;i++)
117         ins(st,i,1,0);
118     for(int i=pl;pri[i]*pri[i]>=n;i--) ins(i,ed,1,0);
119 }
120
121 int main()
122 {
123     len=0;
124     memset(first,0,sizeof(first));
125     sum=0;
126     scanf("%d",&n);
127     init();
128     max_flow();
129     printf("%lld\n",sum+1);
130     return 0;
131 }

View Code

有些东西不开LL会WA掉。

2017-04-13 07:24:50

转载于:https://www.cnblogs.com/Konjakmoyu/p/6702180.html

【BZOJ 3308】 3308: 九月的咖啡店 (费用流|二分图最大权匹配)相关推荐

  1. 【bzoj3308】九月的咖啡店 费用流

    这种题还是要先找问题的某些性质才能做 结论: 1.一个数中最多有两个质数 2.两个质数一个小于根n,一个大于根n 建二分图 源点S向小于根n的质数连一条容量为1费用为0的边 大于根n的质数向汇点T连一 ...

  2. [BZOJ 1221][HNOI2001]软件开发(费用流)

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  3. BZOJ 4849 [NEERC2016] Mole Tunnels (模拟费用流)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4849 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...

  4. BZOJ 4849 [NEERC2016]Mole Tunnels (模拟费用流)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4849 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...

  5. C2. Tidying Up(费用流 二分图)

    http://codeforces.com/problemset/problem/316/C2 题意: 有n*m格子,[1,n*m/2]每个数都出现两次,现在可以选择一些点,被选择的点之间可以任意交换 ...

  6. bzoj 1930: [Shoi2003]pacman 吃豆豆 [费用流]

    1930: [Shoi2003]pacman 吃豆豆 题意:两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的 ...

  7. BZOJ 1937: [Shoi2004]Mst 最小生成树 [二分图最大权匹配]

    传送门 题意: 给一张无向图和一棵生成树,改变一些边的权值使生成树为最小生成树,代价为改变权值和的绝对值,求最小代价 线性规划的形式: $Min\quad \sum\limits_{i=1}^{m} ...

  8. UVA1411 Ants(带权二分图的最大完美匹配、zkw费用流)

    题解 给定一些黑点白点,要求一个黑点链接一个白点并且线段不相交(转成二分图最大权匹配使用费用流解决)<训练指南>P351 输出方案:满流即为答案(满流是指这条路的流量跑满了,也就是说edg ...

  9. 洛谷 - P4014 分配问题(费用流/KM)

    题目链接:点击查看 题目大意:给出n个工人和n个工作,每个人做每一个工作的效率都是不同的,问如何分配能让效率最低/最高 题目分析:最小费用最大流和最大费用最大流的模板题,直接套模板跑答案就行了,没有任 ...

  10. NOJ 2094 以撒的谜题 (费用流)

    以撒的谜题 Time Limit: 2000/1000 MS (Java/Others)   Memory Limit 65536/32768 K (Java/Others) 题目描述 以撒在天堂遇到 ...

最新文章

  1. 【Spring】DispatcherServlet的启动和初始化
  2. oracle常见单词_Oracle的词汇表
  3. 在公司如何远程控制家中电脑
  4. [Dubbo开发]配置简单的生产者和消费者
  5. 集客家客运维那些事_2011年集客家客代维考试题库V2
  6. Docker入门(CentOS7)
  7. Python每日小知识(2):字符串和编码
  8. CodeForces 314C 树状数组 + dp
  9. 微信小程序|开发实战篇之八-list列表组件及其子组件
  10. php和mysql学生报名系统_[源码和文档分享]基于PHP和MYSQL数据库实现的公共考试报名管理系统网站...
  11. Java实现图书管理系统
  12. 软件开发角色知识概括
  13. lisp成套电气设计_针对电气成套行业的专业设计仿真软件
  14. 32位联想台式机更新xp到win10工作站版本
  15. 记忆拼图游戏设计及完整代码
  16. 使用matlab代码计算太阳高度角
  17. AS179-92LF pHEMT GaAs FET单刀双掷(SPDT)开关SKYWORKS
  18. 黑盒测试方法之错误推测法概述
  19. aspx页面乱码问题解决
  20. OSChina 周四乱弹 ——士可杀不可辱,这句话用英语怎么说?

热门文章

  1. [CF617E]XOR and Favorite Number/[CQOI2018]异或序列
  2. Node.js~在linux上的部署~pm2管理工具的使用
  3. 轻松提高Win2003的运行速度
  4. 阿里云--域名,主机,备案都配置好了,就是不能访问网站的解决方案
  5. 关于指针初始化的问题 - 回复下雨天2
  6. Android 读取手机归属地
  7. uniapp动态修改元素节点样式
  8. pc端滚动去掉滚动条scroll
  9. python语言程序设计期末试卷_Python语言程序设计17182试题题目及答案,课程2020最新期末考试题库,章节测验答案...
  10. nslookup java_使用JAVA实现nslookup命令