COGS 2258 復仇的序幕曲(動態樹分治)

2021-08-06 05:20:34 字數 760 閱讀 1892

傳送門:cogs-2258

題意:在一棵n個節點的樹上進行m次詢問:與u的距離不超過t的節點權值和

題解:動態樹分治

每一層子樹把節點按與根節點的距離排序,記錄一下字首和

#includeusing namespace std;

const int mx = 8e4 + 5;

const int mxm = mx * 40;

struct tree

bool operator<(const node& _a)const

};vector ver;

void init (int _n)

void add (int dir, int x)

int sum(int t)

void sort_presum()

}void dfs_tree(int u, int fa, int rt, int subrt, int dir)

}void dfs(int u)

t[id[rt]].sort_presum();

for (int i = head[rt]; ~i; i = e[i].nxt)

}int query(int u, int t)

return ret;

}int main()

dfs(1);

for (int i = 1, u, t; i <= m; i++)

return 0;

}

洛谷2258 子矩陣

給出如下定義 子矩陣 從乙個矩陣當中選取某些行和某些列交叉位置所組成的新矩陣 保持行與列的相對順序 被稱為原矩陣的乙個子矩陣。例如,下面左圖中選取第2 4行和第2 4 5列交叉位置的元素得到乙個2 3的子矩陣如右圖所示。9 3 3 3 9 9 4 8 7 4 1 7 4 6 6 6 8 5 6 9 ...

洛谷p2258 子矩陣

子矩陣 題目鏈結 然後這是一道非常暴力的題,首先是直接dfs的暴力操作 因為同時枚舉行和列不好列舉,所以我們可以先枚舉行,當行列舉完了,再列舉列。然後都列舉完了,就可以按照題目要求算一下,然後比較算到的答案與當前值的大小,保留較小的那乙個。code includeusing namespace st...

洛谷P2258 子矩陣

題目 如果暴力的話,時間複雜度是 rcc n,n 2 2 主要考察搜尋枚舉行和列,並沒有用到dp的思想。考慮優化的話,發現枚舉行或列中至少需要一步,因為這個題只能預處理優化,如果都不列舉,就相當於盲人摸象,無法預處理來優化。因此要搜尋枚舉行或列,然後預處理並在列或行上跑dp,這樣就可以少些列舉時間,...