题目链接: http://codeforces.com/problemset/problem/804/C

题意: 有一颗含有 n 个顶点的树, 第 i 个顶点上有 k 个冰激凌, 每个冰激凌的种类为 si . 现在要给所有定点上的冰激凌染色 , 要求相同种类的冰激凌染相同的颜色, 并且同一个顶点上的冰激凌要求染不同颜色.

注意: 同一个顶点中不会出现相同的冰激凌

思路: dfs染色

首先因该考虑最多需要多少中颜色, 然后再考虑怎么染色. 对于一种冰激凌, 如果确定了其染什么颜色, 那么在后面其他顶点中遇到这中冰激凌也直接染成这种颜色即可.

对于一种在其它顶点中用过的颜色, 若在当前顶点中没有用过, 那么可以将当前顶点中某个冰激凌染成这种颜色. 显然, 限制所需颜色种数的条件为 max(ki), 并且最少需要的颜色种数即为: max(ki). 至于具体染色方案只需 dfs 一遍即可. dfs 过程为: 在当前顶点中, 对于之前染过色的冰激凌, 先给它染上同种颜色, 对于剩下的冰激凌, 依次选取当前最小的且当前顶点中没用过的颜色染上即可.

代码:

 #include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>
#include <map>
using namespace std; const int MAXN = 3e5 + ;
vector<int> vt1[MAXN], vt2[MAXN];
map<int, int> vis;
int sol[MAXN]; void dfs(int x, int pre){
// memset(vis, 0, sizeof(vis));用数组标记会tle
vis.clear();
for(int i = ; i < vt1[x].size(); i++){
if(sol[vt1[x][i]]) vis[sol[vt1[x][i]]] = ;//记录前面用过的颜色
}
int cnt = ;
for(int i = ; i < vt1[x].size(); i++){
if(sol[vt1[x][i]]) continue;
while(vis[++cnt]){};
sol[vt1[x][i]] = cnt;//将没有标记的冰激凌染上新颜色
}
for(int i = ; i < vt2[x].size(); i++){
if(vt2[x][i] != pre) dfs(vt2[x][i], x);
}
} int main(void){
int n, m, k, x, y, ans = ;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++){
scanf("%d", &k);
if(ans < k) ans = k;
while(k--){
scanf("%d", &x);
vt1[i].push_back(x);
}
}
for(int i = ; i < n; i++){
scanf("%d%d", &x, &y);
vt2[x].push_back(y);
vt2[y].push_back(x);
}
dfs(, -);
printf("%d\n", ans);
for(int i = ; i <= m; i++){
if(sol[i]) printf("%d ", sol[i]);
else printf("1 ");
}
puts("");
return ;
}

cf804C(dfs染色)的更多相关文章

  1. hdu 4751(dfs染色)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...

  2. hdu 5313 Bipartite Graph(dfs染色 或者 并查集)

    Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants ...

  3. hdu 4751 Divide Groups(dfs染色 或 2-sat)

    Problem Description   This year is the 60th anniversary of NJUST, and to make the celebration more c ...

  4. Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)

    题目链接:http://codeforces.com/contest/742/problem/E 题意: 有一个环形的桌子,一共有n对情侣,2n个人,一共有两种菜. 现在让你输出一种方案,满足以下要求 ...

  5. 紫书 习题8-9 UVa 1613 (dfs染色+图的性质)

    这道题一开始我没想什么直接开始染, 但是是for循环一个节点一个节点染, 然后就WA 后了看了https://www.cnblogs.com/jerryRey/p/4702323.html 发现原来还 ...

  6. 【POJ - 2386】Lake Counting (dfs+染色)

    -->Lake Counting 直接上中文了 Descriptions: 由于近日阴雨连天,约翰的农场中中积水汇聚成一个个不同的池塘,农场可以用 N x M (1 <= N <= ...

  7. Codeforces Gym100502A:Amanda Lounges(DFS染色)

    http://codeforces.com/gym/100502/attachments 题意:有n个地点,m条边,每条边有一个边权,0代表两个顶点都染成白色,2代表两个顶点都染成黑色,1代表两个顶点 ...

  8. Codeforces 781A:Andryusha and Colored Balloons(DFS染色)

    http://codeforces.com/contest/782/problem/C 题意:给一棵树染最少的颜色,使得相邻距离为2的点都是不同的颜色,问最少是多少种颜色并输出每个点的颜色. 思路:比 ...

  9. CodeForces-687A(DFS,染色)

    链接: https://vjudge.net/problem/CodeForces-687A 题意: Recently, Pari and Arya did some research about N ...

随机推荐

  1. DBGrideh 实现自动排序

    一.点击标题自动排序 1.在optioneh中设置:AutosortMarking:=True2.设置DbGridEh的属性:(不一定总要设置,与使用的数据连接有关)sortlocal:=True;3 ...

  2. 分享知识-快乐自己:Shrio 案例Demo概述

    Shiro 权限认证核心: POM:文件: <!--shiro-all--> <dependency> <groupId>org.apache.shiro</ ...

  3. php 微信公众平台开发之微信群发信息

    这篇文章主要为大家详细介绍了php微信公众平台开发之微信群发信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.目的 完成在微信公众号中群发消息.这里只是完成简单的文字发送.也可以发送语音图片 ...

  4. php如何判断电脑访问还是手机访问?

    手机上网用户数量越来越大,如今各网站都推出了手机网站,电脑用户访问时直接访问电脑版网页,当用户通过手机访问网站时则跳自动跳转到手机版网页,下面给大家分享一段php中判断电脑访问还是手机访问的代码: & ...

  5. codeforces 707A A. Brain's Photos(水题)

    题目链接: A. Brain's Photos 题意: 问是黑白还是彩色; 思路: 没有思路: AC代码: #include <iostream> #include <cstdio& ...

  6. linux命令学习笔记(35):ln 命令

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在 不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要 ...

  7. Java中常见的集合框架

    1. 一.collection (有序)接口的实现的接口 set  list 其中set接口的实现类是HashSet,List接口的实现类是ArrayList.LinkList.Vector 二.Ma ...

  8. POJ-2564 01背包问题

    #include"cstdio" #include"cstring" #include"algorithm" using namespace ...

  9. DC/DC尖峰脉冲吸收电路

    在DC/DC转换器中,脉冲问题直接影响到产品的EMI和电源噪声,需要在某些时候加尖峰脉冲吸收电路. 从上图可以看到,尖峰脉冲吸收电路就是一个RC吸收电路.至于在DC/DC哪里加RC吸收电路,这里有一个 ...

  10. TreeView控件实践

    TreeView控件可以通过HierarchicalDataTemplate 和 DataTemplate来自定义. 1)HierarchicalDataTemplate用来支持HeaderedIte ...