国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CF 782C 貪心,DFS染色,水題

2019-11-06 06:41:03
字體:
來源:轉載
供稿:網友

題目鏈接:見這里 題意:給了一顆樹,要讓每個連起來的(u, v, w)三個點的顏色不同,默認1點被染成顏色1,問最少多少種顏色可以完成,并輸出每個點的顏色編號。 解法:貪心+DFS,直接記錄一下,這個點的父親的顏色,和這個點的父親的父親的顏色,只要顏色顏色和它們不同就可以用這個顏色更新當前這個點的顏色,染完這個點之后讓顏色編號nowc++,使得每個點的其他兒子節點和它的顏色不同。

#include <bits/stdc++.h>using namespace std;const int maxn = 2e5+10;struct edge{ int v, nxt; edge(){} edge(int v, int nxt) : v(v), nxt(nxt) {}}E[maxn*2];int n, ans[maxn], head[maxn], edgecnt;void init(){edgecnt = 0; memset(head, -1, sizeof(head));}void addedge(int u, int v){ E[edgecnt].v = v, E[edgecnt].nxt = head[u], head[u] = edgecnt++;}void dfs(int u, int fa){ int nowc = 1; for(int i = head[u]; ~i; i = E[i].nxt){ int v = E[i].v; if(v == fa) continue; while(ans[u] == nowc || ans[fa] == nowc) nowc++; ans[v] = nowc; nowc++; dfs(v, u); }}int main(){ init(); int n; scanf("%d", &n); for(int i = 1; i < n; i++){ int u, v; scanf("%d%d", &u, &v); addedge(u, v); addedge(v, u); } ans[1] = 1; dfs(1, 0); int maxc = 0; for(int i = 1; i <= n; i++) maxc = max(maxc, ans[i]);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 五寨县| 汶上县| 随州市| 都安| 彭阳县| 灵璧县| 剑川县| 洛浦县| 元氏县| 剑川县| 阳城县| 鲁山县| 东城区| 永吉县| 漳州市| 从化市| 高陵县| 包头市| 连江县| 登封市| 富民县| 冀州市| 满城县| 花莲市| 长垣县| 永春县| 长岛县| 广灵县| 宜兰市| 霸州市| 萨嘎县| 鄂托克前旗| 新乡市| 咸丰县| 乌拉特中旗| 花莲县| 灵石县| 上饶市| 离岛区| 封开县| 玉溪市|