在不超過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一直往後延伸,然後從源點到匯點計算每條路,但是這樣只是單條路的最值,有時可能因為走一條路而間接的認定了除這條路以外的某個路通...