紅和藍 題解 思維

2022-06-10 16:39:08 字數 890 閱讀 2245

其實比賽想到了一部分但是自己不知道怎麼去實現

直接copy隊友的

可以發現,樹的葉子節點肯定是與它的父親節點相匹配的,所以我們深搜一遍,從底層往上去模擬匹配的過程,對於以i為根節點的子樹,我們先將它的子子樹匹配好,如果 與 i 相鄰的兒子節點都有匹配關係,那麼說明 i 節點肯定要跟它的父親節點匹配,如果只剩 1 個點未匹配,那麼就讓他和 i 節點匹配,如果存在多個,那麼肯定不存在解。

最後我們再對根節點任意塗一種顏色,然後根據匹配關係對其他節點依次塗色。

#include#define fi first

#define se second

#define debug cout<<"i am here"

typedef long long ll;

const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;

const int eps=1e-6;

int n;

int ans[maxn],match[maxn];

int head[maxn],cnt;

struct edgee[maxn<<1];

void add(int u,int v);

head[u]=cnt;

}void dfs1(int son,int fa)

}}void dfs2(int son,int fa,int cur)else

}}signed main()

dfs1(1,1);

for(int i=1;i<=n;i++)

}dfs2(1,1,1);

for(int i=1;i<=n;i++)

return 0;

}

模擬賽 紅藍牌

題目 明明有n張牌,正面按編號寫有數字1到n 每個數字只出現一次 每張牌的反面根據正面的數字塗上兩種顏色。如果正面的數字是質數,則為紅色,反之為藍色。明明的老師從這n張牌裡選出了一些,按數字從小到大排序後全部反面向上放成一行。他要明明判斷這些牌上的數字。輸入格式 第一行 乙個正整數n,1 n 100...

DP 概率 紅藍球

有 n 個紅球和 m 個藍球,a,b,c 三個人,輪流取球。若 a 取到紅球則 a 勝利,若 b 取到紅球則 b 勝利,c只負責取球搗亂,不參與勝負。若最後全部球取完後 a 沒有拿到紅球,則 b 勝利,求 a 勝利的概率。輸入 m,n 輸出 a 勝利的概率,保留 5 位小數 補零 樣例輸入 3 4 ...

題解 貪玩藍月

題目傳送門 給出一種元素 u,w 表示它的特徵值為 u 戰鬥力為 w 現在給你乙個雙端佇列,維護該元素,支援兩端加點刪點,以及查詢特徵值之和 pmod p 在 l,r 之內的戰鬥力之和最大的子串行。設操作次數為 m 則保證 m le 5 times 10 4,p le 500 因為懶 菜 得 不 一...