【BZOJ 3308】 3308: 九月的咖啡店 (费用流|二分图最大权匹配)
3308: 九月的咖啡店
Time Limit: 30 Sec Memory Limit: 128 MB
Submit: 244 Solved: 86Description
深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事
我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这
里若干种兑在一起。不过有些原料不能同时在一杯中,如果两个编号
为i,j的原料,当且仅当i与j互质时,才能兑在同一杯中。
现在想知道,如果用这N种原料来调同一杯咖啡,使用的原料编号之和
最大可为多少。Input
一个数字N
Output
如题
Sample Input
10Sample Output
30HINT
1<=N<=200000
Source
【分析】
其实一开始也是认为每个质数自己搞成一个极大的数。
后来也发现大于$\sqrt n$可能是有问题的。
然后最i多只会有两个数,且一个大于$\sqrt n$,一个小于【这种东西还是靠胆量猜吧?或许可以证明?
可以先每个质数自己搞成一个极大的数,然后建二分图,
若a,b能配对
a,b连边 权值Vab−Va−Vb
【费用流ins也能打错的我。。
![](/assets/blank.gif)
![](/assets/blank.gif)
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: 九月的咖啡店 (费用流|二分图最大权匹配)相关推荐
- 【bzoj3308】九月的咖啡店 费用流
这种题还是要先找问题的某些性质才能做 结论: 1.一个数中最多有两个质数 2.两个质数一个小于根n,一个大于根n 建二分图 源点S向小于根n的质数连一条容量为1费用为0的边 大于根n的质数向汇点T连一 ...
- [BZOJ 1221][HNOI2001]软件开发(费用流)
Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...
- BZOJ 4849 [NEERC2016] Mole Tunnels (模拟费用流)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4849 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...
- BZOJ 4849 [NEERC2016]Mole Tunnels (模拟费用流)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4849 题解 其实也是模拟费用流,但是这道题和一般的题目不一样,这道题是在一个完全二叉树上 ...
- C2. Tidying Up(费用流 二分图)
http://codeforces.com/problemset/problem/316/C2 题意: 有n*m格子,[1,n*m/2]每个数都出现两次,现在可以选择一些点,被选择的点之间可以任意交换 ...
- bzoj 1930: [Shoi2003]pacman 吃豆豆 [费用流]
1930: [Shoi2003]pacman 吃豆豆 题意:两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的 ...
- BZOJ 1937: [Shoi2004]Mst 最小生成树 [二分图最大权匹配]
传送门 题意: 给一张无向图和一棵生成树,改变一些边的权值使生成树为最小生成树,代价为改变权值和的绝对值,求最小代价 线性规划的形式: $Min\quad \sum\limits_{i=1}^{m} ...
- UVA1411 Ants(带权二分图的最大完美匹配、zkw费用流)
题解 给定一些黑点白点,要求一个黑点链接一个白点并且线段不相交(转成二分图最大权匹配使用费用流解决)<训练指南>P351 输出方案:满流即为答案(满流是指这条路的流量跑满了,也就是说edg ...
- 洛谷 - P4014 分配问题(费用流/KM)
题目链接:点击查看 题目大意:给出n个工人和n个工作,每个人做每一个工作的效率都是不同的,问如何分配能让效率最低/最高 题目分析:最小费用最大流和最大费用最大流的模板题,直接套模板跑答案就行了,没有任 ...
- NOJ 2094 以撒的谜题 (费用流)
以撒的谜题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit 65536/32768 K (Java/Others) 题目描述 以撒在天堂遇到 ...
最新文章
- 【Spring】DispatcherServlet的启动和初始化
- oracle常见单词_Oracle的词汇表
- 在公司如何远程控制家中电脑
- [Dubbo开发]配置简单的生产者和消费者
- 集客家客运维那些事_2011年集客家客代维考试题库V2
- Docker入门(CentOS7)
- Python每日小知识(2):字符串和编码
- CodeForces 314C 树状数组 + dp
- 微信小程序|开发实战篇之八-list列表组件及其子组件
- php和mysql学生报名系统_[源码和文档分享]基于PHP和MYSQL数据库实现的公共考试报名管理系统网站...
- Java实现图书管理系统
- 软件开发角色知识概括
- lisp成套电气设计_针对电气成套行业的专业设计仿真软件
- 32位联想台式机更新xp到win10工作站版本
- 记忆拼图游戏设计及完整代码
- 使用matlab代码计算太阳高度角
- AS179-92LF pHEMT GaAs FET单刀双掷(SPDT)开关SKYWORKS
- 黑盒测试方法之错误推测法概述
- aspx页面乱码问题解决
- OSChina 周四乱弹 ——士可杀不可辱,这句话用英语怎么说?
热门文章
- [CF617E]XOR and Favorite Number/[CQOI2018]异或序列
- Node.js~在linux上的部署~pm2管理工具的使用
- 轻松提高Win2003的运行速度
- 阿里云--域名,主机,备案都配置好了,就是不能访问网站的解决方案
- 关于指针初始化的问题 - 回复下雨天2
- Android 读取手机归属地
- uniapp动态修改元素节点样式
- pc端滚动去掉滚动条scroll
- python语言程序设计期末试卷_Python语言程序设计17182试题题目及答案,课程2020最新期末考试题库,章节测验答案...
- nslookup java_使用JAVA实现nslookup命令