BZOJ 4514 Sdoi2016 數字配對

2022-04-30 07:48:09 字數 1980 閱讀 3244

time limit: 10 sec  memory limit: 128 mb

submit: 1606  solved: 608

[submit][status][discuss]

有 n 種數字,第 i 種數字是 ai、有 bi 個,權值是 ci。

若兩個數字 ai、aj 滿足,ai 是 aj 的倍數,且 ai/aj 是乙個質數,

那麼這兩個數字可以配對,並獲得 ci×cj 的價值。

乙個數字只能參與一次配對,可以不參與配對。

在獲得的價值總和不小於 0 的前提下,求最多進行多少次配對。

第一行乙個整數 n。

第二行 n 個整數 a1、a2、……、an。

第三行 n 個整數 b1、b2、……、bn。

第四行 n 個整數 c1、c2、……、cn。 

一行乙個數,最多進行多少次配對

32 4 8

2 200 7

-1 -2 1

4n≤200,ai≤10^9,bi≤10^5,∣ci∣≤10^5

鳴謝menci上傳

其實不難發現這是乙個網路流的題目...

然後考慮如何建圖...

我們發現題目中有用的資訊大概就只有一句話了:

若兩個數字 ai、aj 滿足,ai 是 aj 的倍數,且 ai/aj 是乙個質數,

於是,我們考慮如何利用這句話...如果我們把$a_x$分解質因數,那麼如果存在$\frac=p$,那麼就代表$a_i$的$x$個質因子裡面有$x-1$和$a_j$的指數相同,並且剩下的那個質因子的指數比$a_j$多$1$,於是,我們考慮記$f[i]$代表$a_i$的質因子指數之和,那麼一定是$f[i]$為奇數的點和$f[i]$為偶數的點之間右邊相連,這就告訴我們這是一張二分圖...

於是我們從$s$向所有的$f[i]$為奇數的點連$$的邊,從$f[i]$為偶數的點向$t$連$$的邊,然後對於所有合法的點對之間從奇數$f[i]$向偶數$f[i]$連$的邊,然後如果要滿足費用不小於$0$,那麼我們跑最大費用最大流,如果當前增廣的流更新答案之後答案不合法就直接停止增廣輸出答案...

一定要抓住題目中給出的資訊進行轉化,多去考慮和演算法有關的性質...

#include#include#include#include#include#include//by neighthorn

#define inf 0x3f3f3f3f3f3f3f

using namespace std;

const int maxn=200+5,maxm=32000+5,maxe=100000+5;

int n,a[maxn],b[maxn],c[maxn];

int cnt,no[maxn],vis[maxm],pri[maxm];

int s,t,hd[maxn],fl[maxe],to[maxe],nxt[maxe],min[maxn],from[maxn];

long long w[maxe],dis[maxn];

mapmp;

inline void prework(void) }}

inline void add(int x,int y,int s,long long l)

inline bool spfa(void)

} return maxflow;

}signed main(void)

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

if(no[i]&1)

add(s,i,b[i],0);

else

add(i,t,b[i],0);

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

for(int j=1;j<=n;j++)

if(a[i]%a[j]==0&&mp.find(a[i]/a[j])!=mp.end())

printf("%d\n",mcmf());

return 0;

}

by neighthorn

bzoj4514 Sdoi2016 數字配對

有 n 種數字,第 i 種數字是 ai 有 bi 個,權值是 ci。若兩個數字 ai aj 滿足,ai 是 aj 的倍數,且 ai aj 是乙個質數,那麼這兩個數字可以配對,並獲得 ci cj 的價值。乙個數字只能參與一次配對,可以不參與配對。在獲得的價值總和不小於 0 的前提下,求最多進行多少次配...

bzoj4514 Sdoi2016 數字配對

bzoj4514 sdoi2016 數字配對 題意 有 n 種數字,第 i 種數字是 ai 有 bi 個,權值是 ci。若兩個數字 ai aj 滿足ai 是 aj 的倍數且 ai aj 是乙個質數,那麼這兩個數字可以配對,並獲得 ci cj 的價值。乙個數字只能參與一次配對,可以不參與配對。在獲得的...

BZOJ4514 Sdoi2016 數字配對

給出n種數a i 和每種數的個數b i 再給出c i 1 i n 如果a i 和a j 能配對當且僅當a i a j 0 a i a j 為質數,並且i和j配對的價值為c i c j 要求在總價值不小於0的情況下,求出最大配對數 跟機房的hanks o和rose max討論了老久才做出來 最大費用最...