p3261 [jloi2015]城池攻占
乍一看,平衡樹?
其實左偏樹更好做啦\(qwq\)
每個節點都來棵左偏樹維護最小值,\(dfs\)往上時合併一下,要是攻不下了就把根節點刪掉,直到能攻下,
對了,攻下後值會變化怎麼辦?\(lazy\)標記一下,和線段樹同理
#include#includeusing namespace std;
typedef long long ll;
const ll maxn=400000;
struct nodedis[maxn];
struct codetree[maxn];
ll n,m,num; ll scc[maxn],dep[maxn],ans[maxn],belong[maxn],tmp[maxn],k[maxn],def[maxn],change[maxn];
ll head[maxn];
inline void add(ll u,ll v); head[u]=num;
}inline void update(ll x)
if(son1)
tree[x].lazy1=1;
tree[x].lazy2=0;
}ll merge(ll x,ll y)
void dfs(ll u,ll fa)else
belong[u]=merge(belong[u],belong[v]);
}while(belong[u] && tree[belong[u]].val}int main()
for(ll i=1;i<=m;++i)
dfs(1,0);
for(ll i=1;i<=n;++i)
printf("%lld\n",scc[i]);
for(ll i=1;i<=m;++i)
printf("%lld\n",dep[tmp[i]]-dep[ans[i]]);
return 0;
}
洛谷P3261 JLOI2015 城池攻占
不得不說,這道題目是真的難,真不愧它的 省選 noi 的紫色大火題!花了我晚自習前半節課看題解,寫 又花了我半節晚自習調 真的心態 基本上改得和題解完全一樣了我才過了這道題!真的煩。沒事,那接下來我來完全把這道題搞透。part 1 理解題目 至少我一開始不知道為什麼要用左偏樹,甚至我看題解一開始也都...
洛谷P3261 JLOI2015 城池攻占
思路分析 由於這道題的資料範圍是n,m 3e5,所以我們直接輸入乙個模擬乙個是會超時的,但是我們可以在輸入所有的士兵之後把同在乙個節點的士兵一起處理,我們可以考慮建乙個堆,從深度最大的節點開始,維護乙個節點內的士兵的最小戰鬥力值,如果戰鬥力最小的士兵都能存活下來,那麼在堆中的其他士兵一定可以活下來,...
P3261 JLOI2015 城池攻占 左偏樹
小銘銘最近獲得了一副新的桌遊,遊戲中需要用 m 個騎士攻占 n 個城池。這 n 個城池用 1 到 n 的整數表示。除 1 號城池外,城池 i 會受到另一座城池 fi 的管轄,其中 fi 每個城池有乙個防禦值 hi,如果乙個騎士的戰鬥力大於等於城池的生命值,那麼騎士就可以占領這座城池 否則占領失敗,騎...