bzoj 3308 九月的咖啡店 費用流

2021-08-02 02:46:49 字數 1304 閱讀 7371

深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事我們假設她有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種原料來調同一杯咖啡,使用的原料...