這個是倍增法的寫法,回頭將tarjan演算法的方式寫上
#include #include #include #include #include #include using namespace std;
const int maxn = 10000 +10;
int n,rt;
int l,r;
vectortree[maxn];
bool root[maxn];
int depth[maxn];
int parent[maxn][25];
void dfs(int cur,int pre,int d)
// cout<<"l:r "<=0;i--)
} //注意停止條件是不想等,但是由於我是逐步減小的做法,所以最後會停下來
// cout<<"ddd2"<
2016夏季練習 dp
首先第乙個是知道了我們的dp原來是有可能用搜尋來進行推演和解釋的,之前一直以為是遞推的。第二個樹形dp的確是第一次看見,所以還是需要多多學習。先來解釋一下這個題目 選乙個樹的非聯通最大子集,其中資料是有權值 tree like dp include include include include u...
2016夏季練習 dp
對於影響因素的個數來判斷需要的維度,根據狀態的多少來開闢陣列 對於各個狀態進行乙個比較,注意使用壓縮的方法對於問題中的所有東西進行優化 include include include using namespace std int n,m const int n 100 5 const int m ...
2016夏季練習 線段樹
解釋在 注釋裡 include include include include using namespace std 由於題目中明確後輸入的y一定更大 也就是認為後輸入的其實對於我們的尋找和排序實際上沒有什麼影響 這樣我們就可以進行具體的查詢 const int maxn 32000 10 int...