刷題 BZOJ 4946 Noi2017 蔬菜

2022-05-25 11:18:14 字數 1126 閱讀 9196

網上大部分都是並查集寫法,但是有大神寫了非並查集寫法,特別容易理解

首先 \(s_i\) 的限制,只需將每乙個蔬菜分出乙個價值為 \(a_i+s_i\) 且過期時間為該蔬菜最晚的一天的蔬菜

把時間倒序之後,問題轉化為每個蔬菜會在第幾天出現,每天貪心選擇價值最大的即可

先求出 \(\max \\) 的答案,然後遞推 \([1,\max \-1]\) 的答案:每次刪除價值最小的 \(m\) 單位蔬菜,不難發現所有蔬菜的銷售時間依然合法

#include#define ui unsigned int

#define ll long long

#define db double

#define ld long double

#define ull unsigned long long

const int maxn=100000+10,p=100000;

int n,m,k,a[maxn],c[maxn],x[maxn],s[maxn],vis[maxn];

ll ans[maxn],sale[maxn],tot;

struct node;

};std::vectorv[maxn];

std::queuered;

std::priority_queueq1;

std::priority_queue< node,std::vector,std::greater> q2;

templateinline void read(t &x)

templateinline void write(t x,char ch='\0')

templateinline void chkmin(t &x,t y)

templateinline t min(t x,t y)

int main()

for(register int i=p;i>=1;--i)

); else if(sale[now.id])q2.push((node));}}

tot=1ll*m*i;

} for(register int i=1,x;i<=k;++i)read(x),write(ans[x],'\n');

return 0;

}

刷題 BZOJ 5415 Noi2018 歸程

考試的時候打的可持久化並查集,沒調出來qaq 後面知道了kruskal重構樹這個東西,感覺好簡單啊 這道題就建出kruskal重構樹後,對於兩個點找到它們的lca,其子樹min就是答案 include define ui unsigned int define ll long long define...

LeetCode刷題系列20

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...

刷題 力扣 20

題目鏈結 題目描述 給定乙個只包括 的字串 s 判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。示例 1 輸入 s 輸出 true示例 2 輸入 s 輸出 true示例 3 輸入 s 輸出 false示例 4 輸入 s 輸出 false示例 5 輸入 ...