bzoj 3308 九月的咖啡店
题目大意:
求若干个<=n的数 两两互质 使和最大 求这个最大的和
思路:
显然,得到两个结论
1 最终的所有数都只能分解为两个质因数
2 这两个质因数 一个<根号n 一个>根号n
于是可以建立二分图,按照数值是否大于根号n分为两个集合
把每个点不大于n的最大次幂加入答案
对于每两个所属集合不同的点,判断他们两个对答案的贡献是否大于两个独立对答案的贡献
如果是,就连边 跑最大费用流
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<map>
#include<vector>
#define ll long long
#define inf 2139062143
#define MAXN 200100
#define MAXM 1000100
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,ntp[MAXN],p[MAXN],tot,ans,q1[MAXN],q2[MAXN],r1,r2;
struct ZKW
{
int fst[MAXN],to[MAXM<<],nxt[MAXM<<],val[MAXM<<],cos[MAXM<<],cnt;
int dis[MAXN],s,t,vis[MAXN],res;
ZKW() {res=,cnt=;}//memset(fst,0xff,sizeof(fst));}
void add(int u,int v,int w,int c) {nxt[cnt]=fst[u],fst[u]=cnt,to[cnt]=v,val[cnt]=w,cos[cnt++]=c;}
int spfa()
{
memset(dis,,sizeof(dis));
queue<int> q;
dis[t]=,vis[t]=;
q.push(t);
while(!q.empty())
{
int x=q.front();q.pop();vis[x]=;
for(int i=fst[x];i;i=nxt[i])
if(val[i^]&&dis[to[i]]>dis[x]-cos[i])
{
//cout<<x<<" "<<dis[x]<<" "<<to[i]<<endl;
dis[to[i]]=dis[x]-cos[i];
if(!vis[to[i]]) {q.push(to[i]);vis[to[i]]=;}
}
}
//memset(vis,0,sizeof(vis));
//cout<<dis[s]<<endl<inf;
return dis[s]<;
}
int dfs(int x,int a)
{
if(x==t||!a) {res+=dis[s]*a;return a;}
if(vis[x])return ;
vis[x]=;
//cout<<x<<endl;
int res=,f;
for(int i=fst[x];i&&a;i=nxt[i])
if(val[i]&&dis[to[i]]==dis[x]-cos[i]&&(f=dfs(to[i],min(a,val[i]))))
res+=f,val[i]-=f,val[i^]+=f,a-=f;
vis[x]=;
return res;
}
void solve()
{
while(spfa())
{
vis[t] = ;
while(vis[t])
{
memset(vis,,sizeof(vis));
dfs(s,);
}
}
}
}Z;
void mem()
{
for(int i=;i<=n;i++)
{
if(!ntp[i]) p[++tot]=i;
for(int j=;p[j]*i<=n&&j<=tot;j++)
{
ntp[p[j]*i]=;
if(i%p[j]==) break;
}
}Z.s=,Z.t=tot+;
}
int calc(int n,int x) {int i=x;for(;i*x<=n;i*=x);return i;}
int main()
{
//freopen("kissatenn16.in","r",stdin);
n=read();mem();int h=sqrt(n),a,b,tmp,k;
for(int i=;i<=tot;i++)
{
//cout<<i<<" "<<p[i]<<" "<<ans<<endl;
if(p[i]*>n) {ans+=p[i];continue;}
if((ll)p[i]*p[i]<=n){Z.add(Z.s,i,,);Z.add(i,Z.s,,);ans+=calc(n,p[i]);q1[++r1]=i;}
else {Z.add(i,Z.t,,);Z.add(Z.t,i,,);ans+=p[i],q2[++r2]=i;}
}
for(int i=;i<=r1;i++)
for(int j=;j<=r2;j++)
{
a=p[q1[i]],b=p[q2[j]];
if(p[q1[i]]*p[q2[j]]<=n)
{
tmp=calc(n/b,a)*b,k=calc(n,a)+b;
//cout<<a<<" "<<b<<" "<<tmp<<" "<<k<<endl;
if(tmp>k) {Z.add(q1[i],q2[j],,k-tmp);Z.add(q2[j],q1[i],,tmp-k);}
}
else break;
}
//cout<<ans<<endl;
Z.solve();printf("%d",ans-Z.res+);
}
bzoj 3308 九月的咖啡店的更多相关文章
- bzoj 3308: 九月的咖啡店【最大费用最大流】
费用流里spfa最后的判断要写成dis[t]>=0而不是dis[t]!=-inf否则会WAWAWA-- #include<iostream> #include<cstdio&g ...
- 【BZOJ 3308】 3308: 九月的咖啡店 (费用流|二分图最大权匹配)
3308: 九月的咖啡店 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 244 Solved: 86 Description 深绘里在九份开了一家咖 ...
- 【BZOJ-3308】九月的咖啡店 最大费用最大流 + 线性筛素数
3308: 九月的咖啡店 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 159 Solved: 56[Submit][Status][Discuss ...
- [bzoj3308]九月的咖啡店_欧拉筛素数_费用流
bzoj-3308 九月的咖啡店 题目大意:深绘里在九份开了一家咖啡让,如何调配咖啡民了她每天的头等大事我们假设她有N种原料,第i种原料编号为i,调配一杯咖啡则需要在这里若干种兑在一起.不过有些原料不 ...
- BZOJ3308 九月的咖啡店
Orz PoPoQQQ 话说这题还有要注意的地方... 就是...不能加SLF优化,千万不能加 n = 40000,不加本机跑出来2sec,加了跑出来40sec...[给跪了 /*********** ...
- BZOJ 3308 毒瘤结论 网络流
结论:在答案集合中的数其质因数最多有两个 且有两个的话一个>n1/2一个<n1/2 这样我们就可以把所有质数筛出来 弄成二分图 左边是<n1/2右边是>n1/2的 所以先把单个 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【bzoj5050】【bzoj九月月赛H】建造摩天楼
讲个笑话,这个题很休闲的. 大概是这样的,昨天看到这个题,第一眼星际把题目看反了然后感觉这是个傻逼题. 后来发现不对,这个修改一次的影响是很多的,可能导致一个数突然可以被改,也可能导致一个数不能被改. ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
随机推荐
- [Python3网络爬虫开发实战] 1.7.3-Appium的安装
Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动Android.iOS等设备完成自动化测试,比如模拟点击.滑动.输入等操作,其官方网站为:http://appiu ...
- react初探索--react + react-router + ant-design 后台管理系统配置
首先确认安装了node环境,Node >= 6. 如果对react 及 ant-design 一无所知,建议去阅读下api文档,react 可以在 codePen 在线练习. react Api ...
- 【memcached】memcached中flags字段的作用
我们一般只注意到memcached的数据结构是key,value,今天看memcached源代码的时候,盯上了flags,没看明白.后来问了一下同事,说PHP当中使用flags标记,标识memcach ...
- Kali Linux 下载、引导、安装
下载卡莉 Linux 官方镜像: https://www.kali.org/downloads/ 官方虚拟机镜像: https://www.offensive-security.com/kali-li ...
- solr-5.3.1配置(win7 x64)
下载solr,下载地址http://www.eu.apache.org/dist/lucene/solr/5.3.1/solr-5.3.1.zip 解压到某个目录下,这里是解压到了d盘目录下,路径:D ...
- SpringMVC Controller的返回类型
Controller的三种返回类型中 ModelAndView类型 带数据带跳转页面 String 跳转页面不带数据 void 通常是ajax格式请求时使用 1返回ModelAndView contr ...
- I - DFS(依然是漫水填充)
Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...
- 标准sqlserver连接语句
sqlserver左右全内连接 原始链接http://www.cnblogs.com/youzhangjin/archive/2009/05/22/1486982.html 连接条件可在FR ...
- python网络编程01
1.什么是C/S架构? 客户端/服务器架构.实现服务端软件与客户端软件基于网络的通信. 2.互联网协议是什么?分别介绍五层协议中每一层的功能? 互联网协议是指用于互联网通信的规范.分为:osi七层.t ...
- java项目连接access数据库
1.导入Access_JDBC30.jar到项目中 jar包百度云链接:https://pan.baidu.com/s/10HFM3HomMArvfHjklA_1MA 密码:0qxp 项目名称-> ...