JSOI2016 反質數序列

2021-10-06 16:09:24 字數 1392 閱讀 2068

點此看題

1

11不可能多次出現,那麼我們只需要考慮為奇數的質數了,由於乙個質數是由乙個奇數和乙個偶數組成,故分成兩部分,把它當二分圖來看待,中間連的邊就表示這兩個相加為質數。

把中間邊設定為inf

infin

f,其他邊設為1

11,然後跑最大流,因為最大流等於最小割,然而這裡如果存在起終點聯通就是存在兩個求和為質數,所以我們需要求最小割,最後的答案為n−n-

n−最小割。

還有很重要的一點就是要用當前弧優化,這道題卡樸素din

ic

dinic

dinic。

#include

#include

#include

#include

using

namespace std;

#define inf 0x3f3f3f3f

const

int m =

3005

;const

int n =

200005

;int

read()

int n,flag,ans,tot,cnt,s,t,a[m]

,f[m]

,cur[m]

,dis[m]

,p[n]

,vis[n]

;queue<

int> q;

struct edge

e[m*m*2]

;void

sieve

(int n)}}

void

add(

int u,

int v,

int c)

,f[u]

=tot;

e[++tot]

=edge

,f[v]

=tot;

}int

bfs()}

}if(!dis[t]

)return0;

return1;

}int

dfs(

int u,

int ept)

}return flow;

}signed

main()

if(a[i]==1

) flag=1;

}for

(int i=

1; i<=n; i++

)for

(int j=

1; j<=n; j++

)for

(int i=

1; i<=n; i++

)while

(bfs()

)printf

("%d\n"

,n-ans)

;}

JSOI2016 最佳團隊

這種最大化形如 x y 的式子的題,很容易想到分數規劃。二分答案,對於當前的mid,設d i p i mid s i 考慮到當乙個節點i被選,那麼fa i 也要被選,那麼乙個想法是選取當前最大的d,然後把它的兒子的d放入堆裡。但是這個方法是錯誤的 然而我一開始就這麼打了,只有10分 題目給出的是一棵...

JSOI2016 最佳團隊

看到這個什麼比值最大,立馬想到了二分答案。然後就變成了乙個樹上揹包問題,直接暴力合併揹包即可。暴力合併不是o n3 的嗎?記錄一下子樹的大小,揹包時的上界設為這個,就降成o n2 感性證明 你可以想象兩個點只會在它們的lca處合併。code include include define fd i,x...

JSOI 2016 最佳團體

有 n n 名候選人,從 1 role presentation 11到 n n 編號,有乙個隊長的編號為 0 role presentation 0 0,每個候選人都由一位編號比他小的候選人推薦 如果為 0 0 則表示是隊長推薦的 隊長希望招募 k role presentation k k個人,...