題意:給出乙個樹,每個節點有一種顏色.每次能夠選中乙個節點,其他的點如果到它的路徑上都是這種顏色那麼可以一起改變顏色.問最少需要改變幾次顏色.
先按照顏色縮點, 然後答案就是縮點之後樹的最大直徑, 直接dp即可.
#include
#include
#include
#include
#include
#include
#include
#define clear(x,y) memset (x,y,sizeof(x))
#define for(a,b,c) for (int a = b; a <= c; a++)
#define rep(a,b,c) for (int a = b; a >= c; a--)
#define fi first
#define se second
#define pii pair
#define pli pair
#define pb push_back
#define mod 1000000007
template
inline
bool scan (t &ret)
using
namespace
std;
#define maxn 200005
#define maxm maxn*2
int n;
struct node edge[maxm];
int head[maxn], cnt, belong[maxn];
pii e[maxn];
int bcc;
void add_edge (int u, int v)
int a[maxn];
bool vis[maxn];
void dfs (int u)
}vector
g[maxn];
int in[maxn], dp[maxn][2];
void dfs (int u, int father)
else
if (dp[v][0]+1 > dp[u][1])
}}int main ()
clear (vis, 0);
bcc = 0;
for (int i = 1; i <= n; i++) if (!vis[i])
if (bcc == 1)
clear (in, 0);
for (int i = 1; i <= n; i++) g[i].clear ();
for (int i = 1; i < n; i++)
}dfs (1, 0);
int ans = 0;
for (int i = 1; i <= bcc; i++)
printf ("%d\n", (ans+1)/2);
return
0;}
codeforces 173E 組隊 線段樹 離線
bsny所在的精靈社群有n個居民,每個居民有一定的地位和年齡,ri表示第i個人的地位,ai表示第i個人的年齡。最近社群裡要舉行活動,要求幾個人分成乙個小組,小組中必須要有乙個隊長,要成為隊長有這樣的條件 1 隊長在小組中的地位應該是最高的 可以並列第一 2 小組中其他成員的年齡和隊長的年齡差距不能超...
Codeforces 588E 樹上主席樹 Lca
codeforces 588e duff in the army 西安邀請賽網路賽j的公升級版本,要求輸出具體的方案,這題就沒辦法離線水過去了。對dfs序建乙個主席樹,那麼對於每個詢問答案就是 sum u sum v sum lca u,v sum fa lca u,v 之後就不難了,實現起來比較複...
Codeforces 976E 題解報告
1 當把所有的倍數2 a都加到同一health上,health增加的最多 2 先計算每乙個creature的hp dmg,按該值對所有的creature排序 再求和,i include using namespace std const int n 200 1000 9 int hp n dmg n...