CodeVS第二次月賽 B

2021-07-04 15:09:25 字數 1526 閱讀 3671

題目描述 description

切記不要加任何檔案讀寫, 本次比賽暫不支援ifndef online_judge。請互相轉告。評測機是linux

是個富有詩意的男孩。在他居住的小鎮上,有 n個村莊,由 n-1條道路連線著。這裡的生活和諧而又寧靜。

有一天 tty偶然閱讀到一篇雜誌上的文章《陽光下的向日葵》,深受感動。特別是其中一位小女孩的故事讓他記憶猶新。 於是他買來葵花籽,決定也像那位小女孩一樣,給村民播種向日葵,把美麗和陽光帶給村莊裡的每乙個人。

於是 tty決定在每次播種前選擇兩個村莊,然後從其中乙個村莊出發,在這兩個村莊的道路上的每乙個村莊(包括起始點)種上一顆向日葵,在編號 i的村莊播種在可以長出 wi個葵花籽,而且向日葵受到天神 owaski的保護,在生長過程中不會被人採摘。

若干天後,待到向日葵成熟時,tty又會以相同的路徑去採摘那些向日葵上的葵花籽, 無論是否採摘,每一次播種的向日葵都會在下一次播種前死亡。

但是有輕微強迫症的他,不會採摘比他採摘的上一朵葵花籽相等或者更少的向日葵。

而tty並不知道這些資料,只能憑著感覺開始採摘,他想在更多的向日葵上採摘葵花籽,你能告訴他可以最多採摘的向日葵棵數嗎?

題解:n個點n-1條邊顯然是一棵樹嘛,所以每個詢問求的是樹上兩點之間權值序列的lis。

考場上我先是轉有根樹,求lca然後暴力找路徑nlogn求lis(其實不需要這麼麻煩),結果爆0了。

正確的姿勢應該是離線演算法,也就是預處理出答案ans[i][j],詢問就o(1)輸出。

首先列舉每個點,dfs求出這個點與其它點的lis。這就是加點地求lis。如果這個點的權值大於棧頂元素的話直接壓棧更新答案。否則二分查詢第乙個權值大於等於它的並將其替換再維護答案。回溯回來要記得改回。這樣的時間複雜度是o(n^2logn+q)的。記得無向圖邊數要乘2。

%%%__debug大神。

#include#include#include#include#include#define inf 0x7fffffff/10

#define x first

#define y second

using namespace std;

const int maxn=4002;

int first[maxn],next[maxn],w[maxn],e=0,v[maxn],n,q=0,f[maxn];

int top=0,ans[maxn][maxn],d[maxn];

struct point

bool operator <(const point& rhs)const

else

ans[from][to]=anss;

dfs(to,u,from,anss);

if(ty)top--;

else

}}int main()

{ freopen("b.in","r",stdin);

freopen("b.out","w",stdout);

scanf("%d",&n);

for(int i=0;i<=n;i++)first[i]=-1;

for(int i=1;i

codeVS第二次月賽 C

題目描述 description 切記不要加任何檔案讀寫,本次比賽暫不支援ifndef online judge。請互相轉告。評測機是linux jijijie是恐怖的科學怪人,他有特殊的 科技 song ci crash。dash在他的家庭農場裡擁有 n塊連續的擁有者黑色和金色混雜的 da shg...

第二次月模擬題 201604 3

題目描述 在作業系統中,資料通常以檔案的形式儲存在檔案系統中。檔案系統一般採用層次化的組織形式,由目錄 或者資料夾 和檔案構成,形成一棵樹的形狀。檔案有內容,用於儲存資料。目錄是容器,可包含檔案或其他目錄。同乙個目錄下的所有檔案和目錄的名字各不相同,不同目錄下可以有名字相同的檔案或目錄。為了指定檔案...

第二次周賽B

有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。其中,蜂房的結構如下所示。input 輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b 0sample input 21 2 3 6sample ou...