題目傳送門
我們將一副牌對應的數連上邊,不難發現當乙個長度為 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個,式子下面逆元積...