【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最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧 ...
随机推荐
- 为什么 .NET 会被叫做 .NET?
微软开发.NET Framework是在20世纪90年代后期,最初是叫做“下一代Windows服务”(Next Generation Windows Services 简称 NGWS). 那么为什么微 ...
- angular package.json中start build
"start": "ng serve --host 0.0.0.0 --port 4200 --proxy-config proxy.conf.json", & ...
- spark作业提交参数设置(转)
来源:https://www.cnblogs.com/arachis/p/spark_parameters.html 摘要 1.num-executors 2.executor-memory 3.ex ...
- 36 - 网络编程-TCP编程
目录 1 概述 2 TCP/IP协议基础 3 TCP编程 3.1 通信流程 3.2 构建服务端 3.3 构建客户端 3.4 常用方法 3.4.1 makefile方法 3.5 socket交互 3.4 ...
- 64_o1
OCE-devel-0.18.1-1.fc26.i686.rpm 15-May-2017 18:37 5634474 OCE-devel-0.18.1-1.fc26.x86_64.rpm 15-May ...
- 在ubuntu 上安装pycharm
1.首先在官网下载pycharm并进行提取,将提取的文件夹放在/usr下面(或者任意位置) 2.然后vi /etc/hosts 编辑 将0.0.0.0 account.jetbrains.com添加到 ...
- 常用的Oracle的doc命令
常用的Oracle的doc命令 1.连接数据库 普通用户连接数据库: conn scott/tiger --(默认的用户名/密码).conn 即"connection"连接数据库的 ...
- C# 获取计算机cpu,硬盘,内存相关的信息
using System;using System.Management; namespace MmPS.Common.Helper{ /// <summary> /// 获取计算机相关的 ...
- ubuntu 上 安装多个php版本
Ubuntu上官方的源,比如 Ubuntu14.04 默认源中的是 PHP5.6.x.Ubuntu16.04 默认源中的是 PHP7.0.x,那么如果想在 Ubuntu16.04 上安装 PHP7.1 ...
- HTML常用标签及其属性
基本 <html>…</html> 定义 HTML 文档 <head>…</head> 文档的信息 <meta> HTML 文档的元信息 & ...