考慮計算每條樹邊出現在哪些區間了,但是這樣不太好統計,補集轉換一下計算每條樹邊沒有出現的區間的個數
那麼用set維護一下每棵子樹中的點的標號,如果乙個區間裡的元素都不在這個set裡或者都在這個set裡,那麼這個點到父親的邊都不在這個區間裡
啟發式合併一下就可以了
#include
#include
#include
#include
#define fi first
#define se second
using
namespace
std;
typedef
long
long ll;
typedef pair pii;
const
int n=100010;
int n,cnt,g[n]; ll w[n];
struct edgee[n<<1];
set s[n];
inline
void addedge(int x,int y)
inline ll c(int l,int r)
inline
void ins(int x,pii y)
}if(r>y.se) w[x]+=c(y.se+1,r);
else
}w[x]+=c(y.fi,y.se);
c.insert(y);
}void dfs(int x,int f)
}int main()
雜題 翻硬幣
問題 a 翻硬幣 時間限制 1 sec 記憶體限制 128 mb 題目描述 有乙個n行n列的棋盤,每個格仔上都有乙個硬幣,且n為偶數。每個硬幣要麼是正面朝上,要麼是反面朝上。每次操作你可以選定乙個格仔 x,y 然後將第x行和第y列的所有硬幣都翻面。求將所有硬幣都變成同乙個面最少需要的運算元。輸入 第...
雜題練習10 11
uva1428 樹狀陣列思博題,然鵝漏了l mid r的情況 我是不是該補腦了 include define ll long long define db double using namespace std const int maxn 100100 const int lim 100000 co...
POJ雜題紀錄
本題解只記錄思想。若讀者覺得題解思路清晰且想看看 可私下聯絡。未整理 poj 2286 the rotation game 迭代深度優先搜尋 這道題目,搜尋深度不確定,dfs會tle,由於處理的狀態是個一維陣列,bfs會mle 因為要把狀態存進佇列中 所以考慮使用迭代深度優先搜尋 iddfs 關於這...