深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這裡若干種兌在一起。不過有些原料不能同時在一杯中,如果兩個編號為i,j的原料,當且僅當i與j互質時,才能兌在同一杯中。現在想知道,如果用這n種原料來調同一杯咖啡,使用的原料編號之和最大可為多少。
n<=200000
有個很不那麼顯然的結論就是,如果乙個數出現了,那麼其最多隻包含兩個素因數,且這兩個素因數乙個
,乙個>n√
這個就真的證不出來的說。
那麼直接把素數分成二分圖直接費用流就好了。
這裡有幾個剪枝:
如果乙個素數大於n/2則直接算入答案。
先把每個素數的結果算進答案,如果va
b>va
+vb 的話再在a和b之間連va
b−va
−vb 的邊。
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
const
int n=200005;
const
int inf=0x7fffffff;
int n,val[n],cnt,prime[n],tot,last[n],s,t,dis[n],pre[n];
struct edgee[n*5];
queue
q;bool not_prime[n],vis[n];
ll ans;
void get_prime(int n)
}}int get_val(int x,int y)
void addedge(int u,int v,int c,int w)
bool spfa()
vis[u]=0;
}if (dis[t]==-inf) return
0; else
return1;}
void mcf()
}int main()
for (int i=1;i<=tot&&prime[i]<=w;i++)
for (int j=tot;j&&prime[j]>w;j--)
while (spfa()) mcf();
printf("%lld",ans+1);
return
0;}
BZOJ3308九月的咖啡店
3308 九月的咖啡店 time limit 30 sec memory limit 128 mb submit 140 solved 49 description 深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事 我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這 裡若干...
bzoj3308 九月的咖啡店 費用流
這種題還是要先找問題的某些性質才能做 結論 1 乙個數中最多有兩個質數 2 兩個質數乙個小於根n,乙個大於根n 建二分圖 源點s向小於根n的質數連一條容量為1費用為0的邊 大於根n的質數向匯點t連一條容量為1費用為0的邊 小於根n的質數a向大於根n的質數b連一條容量為1費用為vab va vb的邊 ...
bzoj3308 九月的咖啡店 費用流
深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事 我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這 裡若干種兌在一起。不過有些原料不能同時在一杯中,如果兩個編號 為i,j的原料,當且僅當i與j互質時,才能兌在同一杯中。現在想知道,如果用這n種原料來調同一杯咖啡,使用的原料...