這道題的關鍵,就是將題目轉化為圖論。我們將每張牌的正反兩面的數值連一條邊,可以發現,我們只能在一棵樹中選n-1個點。那麼就意味著,當乙個詢問包含一整棵樹時,這是不可能的(因為是用數值做編號,可以發現乙個點只可能出現在一棵樹中)。
那麼如何實現呢?我們處理出每棵樹的min和max,自然,樹的其他所有節點都會包含在這一區間內。
#include
#include
#include
#include
using
namespace std;
const
int n =
1e5+2;
int n, k, q, minr[n]
, sum, bian, maxx, minn;
bool vis[n]
;vector <
int> g[n]
;void
read
(int
&x)}
void
dfs(
const
int x)
}int
main()
for(
int i =
1; i <= n; i ++
) minr[i]
= n +1;
for(
int i =
1; i <= n; i ++)}
for(
int i = n -
1; i >=
1; i --
)//意義:i+1--minr[i+1]可能被本區間包含,這時minr可以向內更進一步
minr[i]
=min
(minr[i]
, minr[i +1]
);read
(q);
while
(q --
)return0;
}
謝謝! 題解 小w的魔術撲克
題目傳送門 我們將一副牌對應的數連上邊,不難發現當乙個長度為 n nn 的區間裡面有 n nn 條邊時,才能打出順子。所以找出樹來就可以了,用並查集維護一下,dfs出所有的樹來。那包含樹的區間都是no的,我們記錄每個樹的區間,相當於做一次線段覆蓋。name c author lovely xians...
藍橋杯 撲克牌「魔術
小明剛上小學,學會了第乙個撲克牌 魔術 到處給人表演。魔術的內容是這樣的 他手裡握著一疊撲克牌 a,2,j,q,k 一共13張。他先自己精心設計它們的順序,然後正面朝下拿著,開始表演。只見他先從最下面拿一張放到最上面,再從最下面拿一張翻開放桌子上,是a 然後再從最下面拿一張放到最上面,再從最下面拿一...
小W的數字
如果設step n 表示n減到0的最小操作次數,顯然step有單調性。我們設f mx,n 表示把n減到0的最小操作次數,mx表示的是比n最高位還高的那些位的最大值。現在我們可以固定最高位,把剩餘位減到0,也就是遞迴計算,返回二元組 cost,dp 表示操作次數為cost,最終還可以額外減掉乙個dp。...