題解 小w的魔術撲克

2021-09-29 13:20:05 字數 1570 閱讀 2829

題目傳送門

我們將一副牌對應的數連上邊,不難發現當乙個長度為 n

nn 的區間裡面有 n

nn 條邊時,才能打出順子。

所以找出樹來就可以了,用並查集維護一下,dfs出所有的樹來。

那包含樹的區間都是no的,我們記錄每個樹的區間,相當於做一次線段覆蓋。

/*

* @name: c

* @author: lovely_xianshen

* @date: 2019-10-29 20:30:54

* @aqours!sunshine!!

*/#include

using

namespace std;

const

int n =

1e6+5;

int fa[n]

;vector<

int> mp[n]

;vector<

int> q;

bool vis[n]

;int minn, maxx, n, k, m;

inline

intread()

while

(ch <=

'9'&& ch >=

'0')

return x * f;

}int

find

(int x)

inline

void

connect

(int x,

int y)

void

dfs(

int x)

struct node

} qr[n]

;int ans[n]

;vector v;

intmain()

}for

(auto i : q)

dfs(i)

;for

(int i =

1; i <= n; i++)if

(!vis[i]))

;}m =

read()

;for

(int i =

1; i <= m; i++

) qr[i]

.l =

read()

, qr[i]

.r =

read()

, qr[i]

.i = i;

sort

(qr +

1, qr + m +1)

;sort

(v.begin()

, v.

end())

;int ml =0;

for(

int i =

1, i0 =

0; i <= m; i++

)for

(int i =

1; i <= m; i++)if

(ans[i]

)puts

("no");

else

puts

("yes");

return0;

}

小w的魔術撲克

這道題的關鍵,就是將題目轉化為圖論。我們將每張牌的正反兩面的數值連一條邊,可以發現,我們只能在一棵樹中選n 1個點。那麼就意味著,當乙個詢問包含一整棵樹時,這是不可能的 因為是用數值做編號,可以發現乙個點只可能出現在一棵樹中 那麼如何實現呢?我們處理出每棵樹的min和max,自然,樹的其他所有節點都...

小W的數字

如果設step n 表示n減到0的最小操作次數,顯然step有單調性。我們設f mx,n 表示把n減到0的最小操作次數,mx表示的是比n最高位還高的那些位的最大值。現在我們可以固定最高位,把剩餘位減到0,也就是遞迴計算,返回二元組 cost,dp 表示操作次數為cost,最終還可以額外減掉乙個dp。...

4665 小w的喜糖

求數字可重的錯排。考慮2 n2 n 2n容斥,列舉哪些位一樣,就是 t s 1 t n t ai bi sum 1 frac t s 1 t ai bi n t 其中b ib i bi 為每種顏色已用個數。考慮dp這個式子,f i j f i j f i j 表示前i種顏色,用了j個,式子下面逆元積...