多校聯合訓練10 HDU 5861 Road

2021-07-16 23:27:38 字數 587 閱讀 8427

【題意】

給你n個村莊,每兩個相鄰的村莊有一條路,m個操作,每次都要從乙個村莊走到另外乙個村莊,每一條路每次都有乙個維修的費用,每條路一開始是關閉的,你可以開啟一次,關閉一次。問你最少的費用是多少。

【解題方法】

copy一遍題解:為了使得花費最小,對於一段路來說,它的開啟時間就是最早一次被用到到最後一次被用到這段時間.對於每乙個操作a,b,在兩個點上打上標記,從左至右做一遍掃瞄,可知道每段路當前有哪些操作會用到它,取出最大值和最小值,在這兩個位置打上標記,最後對結果再進行一次掃瞄即可.

【ac **】

#include using namespace std;

const int maxn = 2e5+10;

int w[maxn],c[maxn];

vectorv[maxn];

sets;

int mx[maxn],mi[maxn];

int main()

for(int i=1; i0) s.insert(j);

else s.erase(-j);

}if(s.size())

else

}for(int i=1; i

多校聯合訓練 hdu5791 Two

hdu5791 dp i j 表示的是序列a前i個數字和序列b前j個數字的公共子串行的總個數,那麼的dp公式就可以這麼表示 理解一下此公式若最尾部的a i 和b j 相等的話,那麼單獨的a i 和b j 組成1個相同子串行。同時我們可以想一下之前的前i 1個子序列和前j i個子序列再加上a i 又能...

多校聯合訓練4 5773

解題方法 0可以轉化成任意整數,包括負數,顯然求lis時盡量把0都放進去必定是正確的。因此我們可以把0拿出來,對剩下的做o nlogn 的lis,統計結果的時候再算上0的數量。為了保證嚴格遞增,我們可以將每個權值s i 減去i前面0的個數,再做lis,就能保證結果是嚴格遞增的。ac include ...

2018多校聯合訓練2

打的慘不忍睹,就過了3題 1004 水題,直接輸出yes就過了,solved by lyy include using namespace std define ll long long int n int main return 0 1010 逆序對 min x,y 隊友一開始wa了4發,給了他模...