洛谷P3250 HNOI2016 網路

2022-05-23 22:30:08 字數 2052 閱讀 3626

題目大意:給定一棵樹。有三種操作:

$0\;u\;v\;t:$在$u$到$v$的鏈上進行重要度為$t$的資料傳輸。

$1\;x:$結束第$x$個時刻的資料傳輸(保證合法)。

$2\;x:$詢問不經過點$x$的資料傳輸中重要度最大的是多少(無解輸出$-1$)。

題解:可以發現一條路徑對所有不在這條路徑上的點有貢獻,所以可以把這些區間給排除(樹鏈剖分中的每一條鏈存下來),把其他位置加上乙個數,可以給每個點維護乙個大根堆。

考慮刪除乙個數,可以再開乙個大根堆,表示刪除的數,若兩個堆頂元素相同,就彈出。

卡點:

c++ code:

#include #include #include #include #define maxn 100010

inline int min(int a, int b)

inline int max(int a, int b)

int head[maxn], cnt;

struct edge e[maxn << 1];

inline void add(int a, int b) ; head[a] = cnt;

}int n, m;

namespace sgt

inline void del(int x)

inline int top()

} v[maxn << 2];

int l, r, num, op;

void modify(int rt, int l, int r)

int mid = l + r >> 1;

if (l <= mid) modify(rt << 1, l, mid);

if (r > mid) modify(rt << 1 | 1, mid + 1, r);

} void add(int __l, int __r, int __num)

void del(int __l, int __r, int __num)

int __ask(int rt, int l, int r)

int ask(int __l)

}using sgt::add;

using sgt::del;

using sgt::ask;

int fa[maxn], dep[maxn], sz[maxn];

int dfn[maxn], idx, top[maxn], son[maxn];

void dfs1(int u) }}

void dfs2(int u) }}

struct modify mo[200010];

struct list

} s[maxn];

void modify(int u, int v, int x, int op = 1) ;

u = fa[::top[u]];

} if (dfn[u] > dfn[v]) std::swap(u, v);

s[top++] = (list) ;

std::sort(s, s + top);

int reach = 1;

for (int i = 0; i < top; reach = max(reach, s[i++].r + 1)) if (reach < s[i].l)

if (reach <= n)

}int main()

dfs1(1);

top[1] = 1;

dfs2(1);

for (int i = 1; i <= m; i++) ;

modify(x, y, z);

break;

case 1:

modify(mo[x].u, mo[x].v, mo[x].x, 0);

break;

case 2:

std::cout << ask(dfn[x]) << '\n';

break;

} }return 0;

}

洛谷3246 HNOI2016 序列

標籤 掃瞄線,樹狀陣列,單調棧 題目傳送門 給定長度為n的序列 a1,a2,an,記為a 1 n 類似地,a l r 1 l r n 是指序列 al,al 1,ar 1,ar。若1 l s t r n,則稱a s t 是a l r 的子串行。現在有q個詢問,每個詢問給定兩個數l和r,1 l r n,...

洛谷 P3197 HNOI2008 越獄

來來來,日常水一篇 滑稽 監獄有連續編號為1 n的n個房間,每個房間關押乙個犯人,有m種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄 輸入格式 輸入兩個整數m,n.1 m 10 8,1 n 10 12 輸出格式 可能越獄的狀態數,模1000...

洛谷P3227 HNOI2013 切糕

題目大意 有乙個 n times m 的切糕,每乙個位置的高度可以在 1,k 之間,每個高度有乙個代價,要求四聯通的兩個格仔之間高度最多相差 d 問可行的最小代價。n,m,k,d leqslant 40 題解 網路流,不考慮相差為 d 的條件時,可以給每個位置建乙個點,源點連向高度為 1 的點容量為...