60ptsn⩽
10 60
ptsn⩽10
全排列並分別計算時間(話說暴力分是真的良心)。
100ptsn⩽
1000
100ptsn⩽
1000
因為期望具有可加性,於是我們可以考慮第
i i
個人在第
j' role="presentation">j
j個位置對答案的貢獻,累加即可。
時間複雜度:θ(
n2) θ(n
2)
**
#include
const
int n=1005;
int n;
double u,v,c[n],d[n];
int main()
20ptsn⩽
300 20
ptsn
⩽300
每次加邊後,列舉每一條邊是否為割邊(用並查集計算連通塊個數)。
50ptsn⩽
3000
50ptsn⩽
3000
每次加邊後,用
tarjan
tarjan
求割邊數量。
100ptsn⩽
5×105
100ptsn⩽
5×105
對於所有不會構成環的邊建樹,其維護深度和父節點。對於會構成環的邊,暴力向上爬,把環中的所有點用並查集縮點。最後,樹上沒有被縮起來的點即為橋。
時間複雜度:θ(
n⋅α(
n)) θ(n
⋅α(n
))
**
#include
#include
const
int n=500005;
struct edge e[n<<1];
int n,m,p,tot,hd[n],ff[n],fa[n],dep[n],u[n],v[n];
bool mark[n],vis[n];
int find(int x)
void add(int u,int v)
void dfs(int u)
}void jump(int &x)
int main()
}for(int i=1;i<=n;++i) if(!vis[i]) dfs(i);
long
long sum=0,ans=1ll;
for(int i=1;i<=m;++i)
printf("%lld\n",ans);
return
0;}
20ptsn⩽
5,m⩽
20 20
ptsn⩽5
,m⩽20
暴力?(我連暴力都不會寫了 qaq) 40
ptsn,m
⩽300
40ptsn,
m⩽
300直接在樹上進行揹包,每次轉移都是 θ(
m2) θ(m
2)
。100ptsn⩽
4000
100ptsn⩽
4000
考慮在樹上的
dfs dfs
序上進行
01 01
揹包 dp dp
,各種細節在**中都有實現和寫明(狀態和轉移等都與一般的揹包問題類似)。
時間複雜度:θ(
nmlogm
) θ(n
mlogm
)(樹上多重揹包二進位制優化)
**
#include
#include
#include
using
namespace
std;
const
int n=4005;
int n,m,tot,cnt,w[n],s[n],c[n],hd[n],en[n],b[n],f[n][n];
struct edge e[n];
void add(int u,int v)
void dfs(int x)
void solve()
for(int k=1;k<=ss;ss-=k,k<<=1)
for(int j=m;j>=k*cc;--j) f[i][j]=max(f[i][j],f[i][j-k*cc]+k*ww);
if(ss) for(int j=m;j>=ss*cc;--j) f[i][j]=max(f[i][j],f[i][j-ss*cc]+ss*ww);
for(int j=0;j<=m;++j) f[i+1][j]=max(f[i+1][j],f[i][j]);
}}int main()
return
0;}
ZR 539 19普轉提 4 和 題解
給定乙個數字 n 請問有哪些區間 l,r 使得 sum r i n 請按 l 從小到大的順序輸出所有區間。根據題意我們可以列出方程 frac n 也就是 l r r l 1 n times 2 於是我們可以列舉 n 的因數 x 令 y frac n x 判斷是否有兩數和為 y 差為 x 即可。這裡假...
題解 總結 普轉提七聯測 Day2
小強作為oi圈爸爸級別的人物,有一天隨手ak的zroi的j轉s模擬賽。ak完了的小強閒得無聊,於是隨手在紙上面寫了幾個看上去非常有規律的數字,555655,24444,7787,110。他覺得這些數字非常的有趣,並開心地拍起了手。於是小強定義乙個有趣的數為 對於乙個正整數,對於其所有的數字,當且僅當...
正睿2020普轉提 第六套 塔
題目 睿爸喜歡搭塔塔。睿爸有n 1n 1 n1 個高度h 1h 1 h1 的紅色磚塊,和n 2n 2 n2 個高度為h 2h 2 h2 的藍色磚塊,這些的磚塊的底面和頂面的長寬均相同,且你不能將這些磚塊立體旋轉或者轉動。睿爸可以按照如下方式搭塔 1.每個磚塊要麼可以放在地面上,要麼必須壘在乙個顏色不...