[Luogu P3242] [BZOJ 4009] [HNOI2015]接水果
洛谷傳送門
BZOJ傳送門
題目描述
風見幽香非常喜歡玩一個叫做 osu!的遊戲,其中她最喜歡玩的模式就是接水果。由於她已經DT FC 了The big black, 她覺得這個遊戲太簡單了,於是發明了一個更加難的版本。
首先有一個地圖,是一棵由
個頂點、
條邊組成的樹(例如圖 1給出的樹包含
個頂點、
這顆樹上有 個盤子,每個盤子實際上是一條路徑(例如圖 1 中頂點 6 到頂點 8 的路徑),並且每個盤子還有一個權值。第 個盤子就是頂點 到頂點 的路徑(由於是樹,所以從 到 的路徑是唯一的),權值為 。
接下來依次會有 個水果掉下來,每個水果本質上也是一條路徑,第 個水果是從頂點 到頂點 的路徑。
幽香每次需要選擇一個盤子去接當前的水果:一個盤子能接住一個水果,當且僅當盤子的路徑是水果的路徑的子路徑(例如圖 中從 到 的路徑是從 到 的路徑的子路徑)。這裡規定:從 到 的路徑與從 到 的路徑是同一條路徑。
當然為了提高難度,對於第 個水果,你需要選擇能接住它的所有盤子中,權值第 小的那個盤子,每個盤子可重複使用(沒有使用次數的上限:一個盤子接完一個水果後,後面還可繼續接其他水果,只要它是水果路徑的子路徑)。幽香認為這個遊戲很難,你能輕鬆解決給她看嗎?
輸入輸出格式
輸入格式:
第一行三個數 和 和 ,表示樹的大小和盤子的個數和水果的個數。 接下來 行,每行兩個數 、 ,表示樹上的 和 之間有一條邊。樹中頂點按 到 標號。 接下來 行,每行三個數 、 、 ,表示路徑為 到 、權值為 的盤子,其中 , 不等於 。 接下來 行,每行三個數 、 、 ,表示路徑為 到 的水果,其中 不等於 ,你需要選擇第 小的盤子,第 小一定存在。
輸出格式:
對於每個果子,輸出一行表示選擇的盤子的權值。
輸入輸出樣例
輸入樣例#1:
10 10 10
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
3 2 217394434
10 7 13022269
6 7 283254485
6 8 333042360
4 6 442139372
8 3 225045590
10 4 922205209
10 8 808296330
9 2 486331361
4 9 551176338
1 8 5
3 8 3
3 8 4
1 8 3
4 8 1
2 3 1
2 3 1
2 3 1
2 4 1
1 4 1
輸出樣例#1:
442139372
333042360
442139372
283254485
283254485
217394434
217394434
217394434
217394434
217394434
說明
。
解題分析
又是一道類似區間 大的問題, 還可以離線, 考慮整體二分。
那麼關鍵的問題在如何判斷一個水果是否能被盤子接住, 這樣我們就可以在二分的時候計算出有幾個盤子接到了同一個水果, 進而得出答案。
那麼對於一個盤子, 我們分情況考慮:
-
兩個端點為父子關係:(例如圖中1、 3)
那麼顯然水果的一端應該在 的子樹內, 一端在 的子樹外, 那麼就可以通過DFS的入棧出棧序分為兩段: 。
- 兩個端點不為父子關係: (例如圖中2、 4)
那麼顯然水果的一端應該在 的子樹內, 另一端在 的子樹內, 也可以分別對應到一段區間上。
這樣我們把每個盤子對應的水果的 序兩端的可行區間可以轉化為一個或兩個矩形, 然後把水果視為一個點, 每次查詢覆蓋點的矩形有多少個。 這個可以用掃描線很方便地完成。
為了統一統計方式, 可以把 序較小的那段區間設為 軸上的一段, 序較大的一段設為 座標區間。
程式碼如下:
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#define R register
#define IN inline
#define W while
#define lbt(i) ((i) & (-(i)))
#define MX 40500
IN char gc()
{
static const int buflen = 1e6;
static char buf[buflen], *p1 = buf, *p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, buflen, stdin), p1 == p2) ? EOF : *p1++;
}
template <class T>
IN void in(T &x)
{
x = 0; R char c = gc();
for (; !isdigit(c); c = gc());
for (; isdigit(c); c = gc())
x = (x << 1) + (x << 3) + c - 48;
}
int n, p, f, cnt, ct, dif, tot;
template <class T> IN T max(T a, T b) {return a > b ? a : b;}
template <class T> IN T min(T a, T b) {return a < b ? a : b;}
int lb[MX], rb[MX], head[MX], fat[MX][17], dep[MX], buf[MX], id[MX], ans[MX], tree[MX << 2];
struct Edge {int to, nex;} edge[MX << 1];
struct Plate {int a, b, val;} plt[MX];
struct Fruit {int a, b, kth;} frt[MX];
struct INFO {int typ, x, y[2], id, val;} line[MX << 3], buf1[MX << 3], buf2[MX << 3]; // 0 for modify, 1 for query
IN bool operator < (const INFO &x, const INFO &y) {return x.x == y.x ? x.typ < y.typ : x.x < y.x;}
IN void add(R int from, R int to) {edge[++cnt] = {to, head[from]}, head[from] = cnt;}
void DFS(R int now)
{
lb[now] = ++ct;
for (R int i = 1; i <= 16; ++i)
{
fat[now][i] = fat[fat[now][i - 1]][i - 1];
if (!fat[now][i]) break;
}
for (R int i = head[now]; i; i = edge[i].nex)
{
相關推薦
[Luogu P3242] [BZOJ 4009] [HNOI2015]接水果
洛谷傳送門
BZOJ傳送門
題目描述
風見幽香非常喜歡玩一個叫做 osu!的遊戲,其中她最喜歡玩的模式就是接水果。由於她已經DT FC 了The big black, 她覺得這個遊戲太簡單了,於是發明了一個更加難的版本。
首先有一個地圖,是一棵由
luogu P3242 [HNOI2015]接水果
sin void sort efi 掃描線 wap tchar 二分 cpp 傳送門
其實這題難點在於處理路徑包含關系
先求出樹的dfn序,現在假設路徑\(xy\)包含\(uv(dfn_x<dfn_y,dfn_u<dfn_v)\)
如果\(lca(u,v)!=
●洛谷P3242 [HNOI2015]接水果
problem tin 樹套樹 end owb gis div 平衡樹 bool 題鏈:
https://www.luogu.org/problemnew/show/P3242
題解:
整體二分,掃描線+樹狀數組。 詳細的題解:http://blog.csdn.
洛谷 P3242 [HNOI2015]接水果 解題報告
取消 區間 span 格式 type 有序 sum query 描述 P3242 [HNOI2015]接水果
題目描述
風見幽香非常喜歡玩一個叫做 \(osu!\) 的遊戲,其中她最喜歡玩的模式就是接水果。由於她已經\(DT\) \(FC\) 了\(\tt{The\ big
Luogu 3242 [HNOI2015]接水果
nbsp 兩種 其中 向上 掃描線 一個 sin 技術分享 none BZOJ4009 權限題
真的不想再寫一遍了
大佬blog
假設有果實$(x, y)$,詢問$(a, b)$,用$st_i$表示$i$的$dfs$序,用$ed_i$表示所有$i$的子樹搜完的$dfs
P3242 [HNOI2015]接水果
display aps alc targe sin 整體 space spa d+ 題面
將樹上的路徑包含問題通過dfs序轉換為雙關鍵字區間包含問題,
進而轉換為區間覆蓋類問題。
由此,我們可以通過二分得出每一個詢問的答案。
由於有多次詢問,故只需要整體
BZOJ4009 HNOI2015 接水果
水果 lca 依次 ble ++ 選擇 ast 1=1 sta
4009: [Hnoi2015]接水果
Time Limit: 60 Sec Memory Limit: 512 MB
Description
風見幽香非常喜歡玩一個叫做 osu!的遊戲,其
[Luogu3242][HNOI2015]接水果
今天 mbo print lca ace 交換 最大 其中 pos Luogu
我今天做兩道整體二分結果全都是BZOJ權限題???
sol
我們抓住“盤子的路徑是水果的路徑的子路徑”這個條件。
考慮每一個盤子路徑\((u,v)\),討論它可以作為哪些水果路徑的子路徑。
如果
BZOJ4009 & 洛谷3242 & LOJ2113:[HNOI2015]接水果——題解
getchar() .html black target str 解調 noi2015 != -- https://www.lydsy.com/JudgeOnline/problem.php?id=4009
https://www.luogu.org/problemnew
bzoj4009 [HNOI2015]接水果
blank 分享圖片 int 覆蓋 pan http clu 掃描線 char link
題意:
題解:
code:
1 #include<bits/stdc++.h>
2 #define rep(i,x,y) for (int i=(x);i&
[HNOI2015]接水果
題面
題解
這道題要求關於第k大的東西,所以可以想到用主席樹或整體二分
我們可以發現,這道題主要的難點就是路徑之間的包含關係,那麼我們分情況討論:
1. LCA不是兩個端點
令這個盤子的兩個端點為\(a,b\)
如果被一個水果完全覆蓋,
那麼,這個水果的兩端分別在\(a,b\)的子樹中
設\(
[Luogu P3243] [BZOJ 4010] [HNOI2015]菜餚製作
洛谷傳送門
BZOJ傳送門
題目描述
知名美食家小 A被邀請至ATM 大酒店,為其品評菜餚。 ATM 酒店為小
A
A
[HNOI2015]接水果——整體二分
題目大意:
給定一顆樹和m條帶有權值的路徑以及q個路徑詢問,每次求m條路徑中且為給出的路徑的子路徑的第k小。
思路:
首先考慮怎麼判斷一條路經是不是一條路徑的子路徑,假設這條路徑在樹上拐彎,那麼包含它的路徑的兩個端點要分別在兩個子樹裡面,如果這條路徑在樹上不拐彎,假設\(v\)是深度大的那個,\(u\)
bzoj4009 [HNOI2015]接水果 整體二分+掃描線+樹狀陣列
Description
給定一棵n個節點的樹,m條帶權樹上路徑(x,y,w),q個詢問,求包含給定路徑(a,b)的帶權路徑中權值第k小路徑的權值 N,P,Q<=40000。
Solution
現在看啥都是病句了,病句學起來好毒啊
考慮單次詢問怎麼做。按照
[bzoj4009] [HNOI2015]接水果 整體二分+掃描線+dfs序+樹狀陣列
Description
風見幽香非常喜歡玩一個叫做 osu!的遊戲,其中她最喜歡玩的模式就是接水果。
由於她已經DT FC 了The big black, 她覺得這個遊戲太簡單了,於是發明了一個更
加難的版本。首先有一個地圖,是一棵由 n 個頂點、n-1 條邊組成的樹(例如圖 1
給出的樹包含 8 個
BZOJ4009:[HNOI2015]接水果(整體二分版)
整體 二維 .cn names etc space for char fine 淺談離線分治算法:https://www.cnblogs.com/AKMer/p/10415556.html
題目傳送門:https://lydsy.com/JudgeOnline/proble
bzoj 4013: [HNOI2015]實驗比較
light tput 定義 title rect [1] pair sin void Description
小D 被邀請到實驗室,做一個跟圖片質量評價相關的主觀實驗。實驗用到的圖片集一共有 N 張圖片,編號為 1 到 N。實驗分若幹輪進行,在每輪實驗中,小 D會被要求觀
BZOJ[4013] [HNOI2015]實驗比較
出現 algo 一個 補全 type 比較 work stream stdin 樹DP+組合數
網上題解很多,這裏就放個有註釋的代碼
CODE
1 #include <cmath>
2 #include <cstdio>
3
BZOJ 4012 HNOI2015 開店 樹的邊分治
產生 per n) php typedef sca log 思路 max 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=4012
題意概述:給出一顆N點的樹,保證樹上所有點的度不超過3,樹上每個點有權值,每條邊
BZOJ 4011 HNOI2015 落憶楓音 DAG上的dp(實際上重點在於分析)
ora can main span next 暴力 pre -m type 題目鏈接:http://www.lydsy.com/JudgeOnline/problem.php?id=4011
題意概述:給出一張N點的DAG(連通),點1的入度為0。現在加一條原圖沒有的邊