費用流 求證明 2019雅禮集訓 sum

2021-09-08 19:32:35 字數 2754 閱讀 5156

在不超過n的數中,選出乙個集合,使得集合內部元素兩兩互質,且集合元素總和盡可能大。

神奇的性質題。

出題人不會證,問了一堆大佬也不會。

哈(那麼證明就留給讀者來完成)

性質是:

1、每個元素最多只有兩個質因子。

2、若有兩個質因子,一定有乙個大n

\sqrt n

n​。有了這兩個性質就很水了

把質數分成超過n

\sqrt n

n​和不超過的部分。

每個質數有兩種選擇:

1、 質數的整次冪

2、與另一部分的乙個質數結合,再求出最大整次冪。

就可以弄成乙個二分圖來算貢獻。

跑費用流的時候要注意,如果當前最大費用為負數就別跑了。

#include

#include

#include

#include

#include

#include

#include

#define sf scanf

#define pf printf

#define maxn 200010

#define inf 0x3fffffff

using

namespace std;

typedef

long

long ll;

ll ans;

int n;

bool isprime[maxn]

;int primes[maxn]

,cnt,minp[maxn]

;mapint,

int>

,int

> mp;

void

prepare()

for(

int j=

1;i*primes[j]

<=n;j++)}

for(

int i=

2;i<=n;i++

)int p2=minp[x]

;while

(x%p2==0)

x/=p2;

if(x==1)

}}queue<

int> q;

bool inq[maxn]

,vis[maxn]

;int dist[maxn]

;vector<

int> a[maxn]

,rev[maxn]

,w[maxn]

,val[maxn]

;void

add_edge

(int u,

int v,

int pri,

int flw)

\n",u,v,pri);

a[u]

.push_back

(v);

a[v]

.push_back

(u);

w[u]

.push_back

(flw)

; w[v]

.push_back(0

);val[u]

.push_back

(pri)

; val[v]

.push_back

(-pri)

; rev[u]

.push_back

(a[v]

.size()

-1);

rev[v]

.push_back

(a[u]

.size()

-1);

}int s,t,las[maxn]

,lastid[maxn]

;bool

spfa()

}}}return vis[t]==1

;}ll maxpri()

x=t;

while

(x!=s)

res+

=f*pri;

}return res;

}vector<

int> p1,p2;

intmain()

// for(int i=0;i// pf("%d ",p1[i]);

// pf("\n");

// for(int i=0;i// pf("%d ",p2[i]);

// pf("\n");

for(

int i=

0;i<

int(p1.

size()

);i++

)for

(int j=

0;j<

int(p2.

size()

);j++

) s=

int(p1.

size()

)+int(p2.

size()

);t=s+1;

for(

int i=

0;i<

int(p1.

size()

);i++

)add_edge

(s,i,0,

1);for

(int i=

0;i<

int(p2.

size()

);i++

)add_edge

(i+int

(p1.

size()

),t,0,

1); ans+

=maxpri()

;pf("%lld"

,ans+1)

;}

奇數碼問題(求證明)

題意 艹,推逆序對推錯了,艹 咳咳,依舊是兩種做法。考慮把整個圖化成一條數列。第二行拼到第一行後面,以此類推 考慮整個圖的逆序對數 0 00也考慮上 左右交換會使逆序對數 1 1 1 那麼上下交換呢?由於0 00比所有數字都要小,所以肯定會 n n n 那麼x xx在數列和中間的n 1 n 1n 1...

網路流 費用流

這個好像不考 沒事可以騙分 費用流,顧名思義,就是有費用的流,也就是說,給乙個網路流圖中的每條弧增加乙個單位流量費用。一般來說求解的費用流都是最大流最小費用。好像沒什麼好bb的 這裡推薦使用zkw演算法求解最小費用流,看著 理解就行,應該還是很好理解的。zkw演算法在稠密圖上跑得飛快,在稀疏圖上還不...

網路流 費用流

網路流有很多種類 其中最大流 有增廣路演算法和預流推進演算法。增廣路演算法就是不斷的新增增廣路。其中的dinic演算法。會稍微提到isap演算法 poj1273 首先想到dfs一直往後延伸,然後從源點到匯點計算每條路,但是這樣只是單條路的最值,有時可能因為走一條路而間接的認定了除這條路以外的某個路通...