【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也能打错的我。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define Maxn 200010
#define Maxm 200010
#define INF 0xfffffff
#define LL long long int mymin(int x,int y) {return x<y?x:y;} struct node
{
int x,y,f,c,o,next;
}t[Maxm*];
int first[Maxn],len; int st,ed;
void ins(int x,int y,int f,int c)
{
if(c<=&&x!=st&&y!=ed) return;
t[++len].x=x;t[len].y=y;t[len].f=f;t[len].c=c;
t[len].next=first[x];first[x]=len;t[len].o=len+;
t[++len].x=y;t[len].y=x;t[len].f=;t[len].c=-c;
t[len].next=first[y];first[y]=len;t[len].o=len-;
} queue<int > q;
bool inq[Maxn];
LL dis[Maxn],flow[Maxn];
int pre[Maxn];
bool bfs()
{
memset(inq,,sizeof(inq));
// memset(dis,63,sizeof(dis));
for(int i=;i<=ed;i++) dis[i]=-INF;
while(!q.empty()) q.pop();
q.push(st);dis[st]=;flow[st]=INF;
inq[st]=;
while(!q.empty())
{
int x=q.front();
for(int i=first[x];i;i=t[i].next) if(t[i].f>)
{
int y=t[i].y;
if(dis[y]<dis[x]+t[i].c)
{
dis[y]=dis[x]+t[i].c;
flow[y]=mymin(flow[x],t[i].f);
pre[y]=i;
if(!inq[y])
{
inq[y]=;
q.push(y);
}
}
}
q.pop();inq[x]=;
}
return dis[ed]>-INF;
} LL sum;
void max_flow()
{
while(bfs())
{
if(dis[ed]<) return;
sum+=flow[ed]*dis[ed];
int x=ed;
while(x!=st)
{
t[pre[x]].f-=flow[ed];
t[t[pre[x]].o].f+=flow[ed];
x=t[pre[x]].x;
}
}
} int n;
LL pri[Maxn];int pl;
LL as[Maxn];
bool vis[Maxn];
void init()
{
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)
{
if(!vis[i]) pri[++pl]=i;
for(int j=;j<=pl;j++)
{
if(i*pri[j]>n) break;
vis[i*pri[j]]=;
if(i%pri[j]==) break;
}
}
for(int i=;i<=pl;i++)
{
as[i]=pri[i];
while(as[i]*pri[i]<=n) as[i]*=pri[i];
sum+=as[i];
}
int i;
for(i=;pri[i]*pri[i]<n&&i<=pl;i++)
for(int j=pl;pri[j]*pri[j]>=n;j--)
{
int x=pri[i]*pri[j];
if(x>n) continue;
while(x*pri[i]<=n) x*=pri[i];
ins(i,j,,x-as[i]-as[j]);
}
st=pl+;ed=st+;
for(int i=;pri[i]*pri[i]<n&&i<=pl;i++)
ins(st,i,,);
for(int i=pl;pri[i]*pri[i]>=n;i--) ins(i,ed,,);
} int main()
{
len=;
memset(first,,sizeof(first));
sum=;
scanf("%d",&n);
init();
max_flow();
printf("%lld\n",sum+);
return ;
}
有些东西不开LL会WA掉。
2017-04-13 07:24:50
【BZOJ 3308】 3308: 九月的咖啡店 (费用流|二分图最大权匹配)的更多相关文章
- POJ2195 Going Home[费用流|二分图最大权匹配]
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22088 Accepted: 11155 Desc ...
- POJ2195 Going Home (最小费最大流||二分图最大权匹配) 2017-02-12 12:14 131人阅读 评论(0) 收藏
Going Home Description On a grid map there are n little men and n houses. In each unit time, every l ...
- BZOJ 3876 支线剧情 | 有下界费用流
BZOJ 3876 支线剧情 | 有下界费用流 题意 这题题面搞得我看了半天没看懂--是这样的,原题中的"剧情"指的是边,"剧情点"指的才是点. 题面翻译过来大 ...
- 从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流)
从多种角度看[BZOJ 1061] [NOI 2008]志愿者招募(费用流) 题面 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运 ...
- 【bzoj3291】Alice与能源计划 模拟费用流+二分图最大匹配
题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...
- [hdu1533]二分图最大权匹配 || 最小费用最大流
题意:给一个n*m的地图,'m'表示人,'H'表示房子,求所有人都回到房子所走的距离之和的最小值(距离为曼哈顿距离). 思路:比较明显的二分图最大权匹配模型,将每个人向房子连一条边,边权为曼哈顿距离的 ...
- [BZOJ 1221] [HNOI2001] 软件开发 【费用流 || 三分】
题目链接:BZOJ - 1221 题目分析 算法一:最小费用最大流 首先这是一道经典的网络流问题.每天建立两个节点,一个 i 表示使用毛巾,一个 i' 表示这天用过的毛巾. 然后 i 向 T 连 Ai ...
- BZOJ 1877: [SDOI2009]晨跑(费用流)
看到要求两个量就下意识的想到了费用流= =,先把一个点拆成两个点就能够解决一个的只经过一次的限制 CODE: #include<cstdio>#include<iostream> ...
- BZOJ 1877 晨跑 拆点费用流
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1877 题目大意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧 ...
随机推荐
- ⑦ 设计模式的艺术-13.代理(Proxy)模式
为什么需要代理模式 中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口. 开闭原则,增加 ...
- GridControl详解(六)样式设置
表格样式:全局设置 例子: 例子: 列样式:只作用于当前的列 通用样式:外观设定 注意:样式设定都是相同的,Appearance前缀.
- ASP.NET 3.5控件和组件开发技术之客户端回发/回调揭密
本文摘录自<纵向切入ASP.NET 3.5控件和组件开发技术>. 对于服务端控件元素,比如ASP.NET的Button标准服务端控件在提交时可以自动把请求发送到服务端处理,这样的控件我们不 ...
- asp.net 遍历文件夹下全部子文件夹并绑定到gridview上
遍历文件夹下所有子文件夹,并且遍历配置文件某一节点中所有key,value并且绑定到GridView上 Helper app_Helper = new Helper(); DataSet ds = n ...
- 使用asp.net改变图片颜色
最近奇葩经理提出了奇葩的需求,要能在网站上改变图片的颜色,比如灰色的变成彩色,彩色的变成灰色,尼玛楼主的感受你们不懂!于是有了下面的代码... 用法:调用update_pixelColor方法并传参数 ...
- 引用类型 ( 对象定义 )——Array 类型
本文地址:http://www.cnblogs.com/veinyin/p/7607293.html 一个数组中可以存储不同类型的值,可以混合存储数字.字符串.对象等 1 创建数组 1.1 构造函数 ...
- HDU 1059 Dividing (dp)
题目链接 Problem Description Marsha and Bill own a collection of marbles. They want to split the collect ...
- NYOJ 93 汉诺塔 (数学)
题目链接 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片 ...
- openjudge-NOI 2.6-1775 采药
题目链接:http://noi.openjudge.cn/ch0206/1775/ 题解: 很经典的01背包问题,设时间为t,价值为v 一维压缩,状态转移方程fj=max(fj,fj-ti+vi) # ...
- spring data jpa条件分组查询及分页
原book对象 package com.shaying.domain; import javax.persistence.Column; import javax.persistence.Entity ...