bzoj3308 九月的咖啡店 費用流

2021-07-10 03:32:19 字數 1324 閱讀 1952

這種題還是要先找問題的某些性質才能做

結論:1、乙個數中最多有兩個質數

2、兩個質數乙個小於根n,乙個大於根n

建二分圖

源點s向小於根n的質數連一條容量為1費用為0的邊

大於根n的質數向匯點t連一條容量為1費用為0的邊

小於根n的質數a向大於根n的質數b連一條容量為1費用為vab-va-vb的邊

va表示單獨選a的最大收益=a^(lgn/lga)

vb表示單獨選b的最大收益=b

vab表示同時選a和b的最大收益=a^(lg(n/b)/lga)*b

優化:如果乙個質數》n/2,那麼它只能單獨選,不用連邊

如果一條邊的費用<0,那麼不如不連

記得最後要加上1。

#include#include#include#include#include#include#define maxn 200010

#define maxm 2000010

#define inf 1000000000

using namespace std;

int head[maxn],to[maxm],c[maxm],next[maxm],len[maxm],p[maxm],fr[maxn],q[maxn],dis[maxn];

int prime[maxn];

bool vis[maxn];

int n,m,num,s,t,tot;

int ans;

void addedge(int x,int y,int z,int w)

bool spfa()

}vis[x]=0;

} if (dis[t]<0) return 0; else return 1;

}void mcf()

void costflow()

int cal(int n,int x)

int main()

} s=0,t=tot+1;num=1;

int pos=0;

for (int i=1;i<=tot;i++)

if ((long long)prime[i]*prime[i]<=n)

else

}for (int i=1;in) break;

int cost=cal(n/prime[j],prime[i])*prime[j]-cal(n,prime[i])-prime[j];

if (cost>0) addedge(i,j,1,cost);

}costflow();

printf("%d\n",ans+1);

return 0;

}

BZOJ3308九月的咖啡店

3308 九月的咖啡店 time limit 30 sec memory limit 128 mb submit 140 solved 49 description 深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事 我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這 裡若干...

bzoj 3308 九月的咖啡店 費用流

深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這裡若干種兌在一起。不過有些原料不能同時在一杯中,如果兩個編號為i,j的原料,當且僅當i與j互質時,才能兌在同一杯中。現在想知道,如果用這n種原料來調同一杯咖啡,使用的原料編號之...

bzoj3308 九月的咖啡店 費用流

深繪里在九份開了一家咖啡讓,如何調配咖啡民了她每天的頭等大事 我們假設她有n種原料,第i種原料編號為i,調配一杯咖啡則需要在這 裡若干種兌在一起。不過有些原料不能同時在一杯中,如果兩個編號 為i,j的原料,當且僅當i與j互質時,才能兌在同一杯中。現在想知道,如果用這n種原料來調同一杯咖啡,使用的原料...