cf804C(dfs染色)
题目链接: 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染色)的更多相关文章
- hdu 4751(dfs染色)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...
- hdu 5313 Bipartite Graph(dfs染色 或者 并查集)
Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants ...
- hdu 4751 Divide Groups(dfs染色 或 2-sat)
Problem Description This year is the 60th anniversary of NJUST, and to make the celebration more c ...
- Codeforces Codeforces Round #383 (Div. 2) E (DFS染色)
题目链接:http://codeforces.com/contest/742/problem/E 题意: 有一个环形的桌子,一共有n对情侣,2n个人,一共有两种菜. 现在让你输出一种方案,满足以下要求 ...
- 紫书 习题8-9 UVa 1613 (dfs染色+图的性质)
这道题一开始我没想什么直接开始染, 但是是for循环一个节点一个节点染, 然后就WA 后了看了https://www.cnblogs.com/jerryRey/p/4702323.html 发现原来还 ...
- 【POJ - 2386】Lake Counting (dfs+染色)
-->Lake Counting 直接上中文了 Descriptions: 由于近日阴雨连天,约翰的农场中中积水汇聚成一个个不同的池塘,农场可以用 N x M (1 <= N <= ...
- Codeforces Gym100502A:Amanda Lounges(DFS染色)
http://codeforces.com/gym/100502/attachments 题意:有n个地点,m条边,每条边有一个边权,0代表两个顶点都染成白色,2代表两个顶点都染成黑色,1代表两个顶点 ...
- Codeforces 781A:Andryusha and Colored Balloons(DFS染色)
http://codeforces.com/contest/782/problem/C 题意:给一棵树染最少的颜色,使得相邻距离为2的点都是不同的颜色,问最少是多少种颜色并输出每个点的颜色. 思路:比 ...
- CodeForces-687A(DFS,染色)
链接: https://vjudge.net/problem/CodeForces-687A 题意: Recently, Pari and Arya did some research about N ...
随机推荐
- Postgresql windows下安装过程
1.下载前三个软件: 理论上安装Perl,TCL,Bison and Flex这三个插件 实际上安装ActiveState Perl,ActiveState tcl ,MinGW 因为MinGW包括了 ...
- [转]HTTP头的Expires与Cache-control
1.概念 Cache-control用于控制HTTP缓存(在HTTP/1.0中可能部分没实现,仅仅实现了Pragma: no-cache) 数据包中的格式: Cache-Control: cache- ...
- 洛谷【P1138】第k小整数
题目传送门:https://www.luogu.org/problemnew/show/P1138 桶排: 对于值域在可以接受的范围内时,我们可以用不依赖比较的桶排去将数据排序.因为桶排不依赖比较排序 ...
- mysql root密码忘记重置
1.修改/etc/my.cnf文件 找到mysqld选项,增加子项skip-grant-tables 2.重新启动mysql服务 service mysqld restart 3.进入mysql 在s ...
- DevExpress源码编译总结
独家提供完整可编译sln文件,本篇文章内容包括基础知识(GAC.程序集强签名.友元程序集).编译过程.注册GAC.添加工具箱.多语言支持.运行时和设计时调试 源码地址 链接:http://pan.b ...
- java中的接口和抽象类的区别
1.接口从用户的角度(使用实现的代码)看问题. 2.接口由编译器强制的一个模块间协作的合约. 3.无成员变量. 4.成员函数只能声明不能实现,(jdk1.8中的default 方法可以有方法体). 接 ...
- linux日常管理-rsync常用选项详解
-av 同步目录 写法 123/ /tmp/333/ 意思是把123下的文件同步到/tmp/333/下 结尾不加/ 只同步目录 两个目录一样的. //////////////////////// ...
- 恢复到版本并销毁之后的git提交记录
git reset --hard HEAD~1(或者你想要的版本号) git push --force # 千万注意:此操作无法恢复
- 拍照选择图片(Activity底部弹出)
效果图如下: 第一步 : 显示出的布局文件:alert_dialog.xml <?xml version="1.0" encoding="utf-8"?& ...
- 关于UI性能优化
1.使用已经有的VIEW,而不是每次都去新生成一个 2.创建自定义类来进行组件和数据的缓存,在下一次调用的时候直接从FLAG中取出 3.分页,预加载 使用VIEWSTUB进行调用时加载 VIEWSTU ...