codeforces 805 E. Ice cream coloring(dfs)
题目链接:http://codeforces.com/contest/805/problem/E
题意:你有n个节点,这个n个节点构成一棵树。每个节点拥有有si个类型的ice,同一个节点的ice互相连边构成完全图。对于拥有相同ice的节点u,v,在树上一定相邻。求将ice构成的图染色,相邻点不可同色的最小颜色数以及方案。
题解:就是简单的dfs一遍现将首个节点对应的ice赋予不同的数字,记录一下ice对应的颜色,再dfs到下个树节点,现将
已经染过色的ice存一下然后再遍历一遍没染过色的ice给他赋予一个符合条件的最小的值具体方法就是用vector存下染过
色的ice然后从小到大排序一下,sta表示vector下表,now表示颜色同时递增知道now!=vector[sta]是赋予这个ice颜色
同时更新一下cnt(cnt表示总共又多少种颜色)
#include <iostream>
#include <cstring>
#include <vector>
#include <set>
#include <cstdio>
#include <algorithm>
using namespace std;
const int M = 3e5 + 10;
set<int>s[M];
set<int>::iterator it;
vector<int>vc[M];
int ans[M] , cnt;
void dfs(int pos , int pre) {
vector<int>used;
if(pre == -1) {
for(it = s[pos].begin() ; it != s[pos].end() ; it++) {
ans[(*it)] = ++cnt;
}
}
else {
for(it = s[pos].begin() ; it != s[pos].end() ; it++) {
if(ans[(*it)]) {
used.push_back(ans[(*it)]);
}
}
int L = used.size();
sort(used.begin() , used.end());
int sta = 0 , now = 1;
for(it = s[pos].begin() ; it != s[pos].end() ; it++) {
if(!ans[(*it)]) {
while(sta < L) {
if(now == used[sta]) now++ , sta++;
else break;
}
ans[(*it)] = now++;
}
cnt = max(cnt , now - 1);
}
}
int len = vc[pos].size();
for(int i = 0 ; i < len ; i++) {
int v = vc[pos][i];
if(v != pre) {
dfs(v , pos);
}
}
}
int main() {
int n , m , num , x;
scanf("%d%d" , &n , &m);
for(int i = 1 ; i <= n ; i++) {
scanf("%d" , &num);
for(int j = 0 ; j < num ; j++) {
scanf("%d" , &x);
s[i].insert(x);
}
}
int u , v;
for(int i = 0 ; i < n - 1 ; i++) {
scanf("%d%d" , &u , &v);
vc[u].push_back(v);
vc[v].push_back(u);
}
memset(ans , 0 , sizeof(ans));
cnt = 0;
dfs(1 , -1);
cnt = max(1 , cnt);
printf("%d\n" , cnt);
for(int i = 1 ; i <= m ; i++) {
if(ans[i] == 0) {
printf("1 ");
}
else {
printf("%d " , ans[i]);
}
}
printf("\n");
return 0;
}
codeforces 805 E. Ice cream coloring(dfs)的更多相关文章
- 【Codeforces 723D】Lakes in Berland (dfs)
海洋包围的小岛,岛内的有湖,'.'代表水,'*'代表陆地,给出的n*m的地图里至少有k个湖,求填掉面积尽量少的水,使得湖的数量正好为k. dfs找出所有水联通块,判断一下是否是湖(海水区非湖).将湖按 ...
- codeforces 682C Alyona and the Tree(DFS)
题目链接:http://codeforces.com/problemset/problem/682/C 题意:如果点v在点u的子树上且dist(u,v)>a[v]则u和其整个子树都将被删去,求被 ...
- Codeforces Round #313 D. Equivalent Strings(DFS)
D. Equivalent Strings time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Codeforces 982 C. Cut 'em all!(dfs)
解题思路: 代码中有详细注解,以任意一点为根,dfs遍历这棵树. 每一个节点可能有好几个子树,计算每棵子树含有的节点数,再+1即为这整棵树的节点. 判断子树是否能切断与根之间的联系,如果子树含有偶数个 ...
- CodeForces 804C Ice cream coloring
Ice cream coloring 题解: 这个题目中最关键的一句话是, 把任意一种类型的冰激凌所在的所有节点拿下来之后,这些节点是一个连通图(树). 所以就不会存在多个set+起来之后是一个新的完 ...
- LeetCode Subsets II (DFS)
题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...
- LeetCode Subsets (DFS)
题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. class Sol ...
- HDU 2553 N皇后问题(dfs)
N皇后问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 在 ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
随机推荐
- Linux 常见的常识及常用快捷键方式
1. ,请写出linux系统中常见一级目录的名称及作用. /root : 超级用户的家目录 /home: 普通用户的家目录 /boot: 启动目录,启动相关文件(系统内核启动文件) /de ...
- SpringBoot Jar包瘦身 - 跟大文件说再见!
前言 SpringBoot部署起来配置非常少,如果服务器部署在公司内网,上传速度还行,但是如果部署在公网(阿里云等云服务器上),部署起来实在头疼.就是 编译出来的 Jar 包很大,如果工程引入了许多开 ...
- 经典SQL(sqlServer)
一.基础 .说明:创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) .分组: ...
- 对比度拉伸(一些基本的灰度变换函数)基本原理及Python实现
1. 基本原理 对比度拉伸是扩展图像灰度级动态范围的处理.通过在灰度级中确定两个点来控制变换函数的形状.下面是对比度拉伸函数中阈值处理的代码示例,阈值为平均值. 2. 测试结果 图源自skimage ...
- 【Java例题】1.1计算n的阶乘
package study; import java.util.*; import java.math.*; public class myClass { public static void mai ...
- JavaWeb——使用会话维持状态2
在这次的例子里面,将完成一类似购物车的功能,在客户访问网站的时候,会选中自己将要购买的商品,而购物车将始终维持着商品的状态,会话将联系起选择第一个商品(第一个请求),选择其他商品(其他请求)以及付款等 ...
- nginx在线与离线安装
1.场景描述 项目要部署到新的服务器上,需要安装nginx,刚好安全部门通知了nginx存在安全漏洞(Nginx整数溢出漏洞,nginx1.13.2之后的版本无问题),就下载最新的nginx进行了安装 ...
- 关于p标签不能嵌套div标签引发的标签嵌套问题总结
问题由来:<p>中嵌套<div>标签,两个都是块级元素,按理应该可以正常显示,但是最后的结果居然是多出来一段<p>的效果,所以就在网上找了许多关于标签嵌套规则的资料 ...
- django报错信息解决方法
You have 17 unapplied migration(s). Your project may not work properly until you apply the migration ...
- Codeforces 868E Policeman and a Tree
题意简述 给你一颗有n个点的树,每条边有边权,有一个警察一开始在点S,他的速度是1,即通过一条长度为x的边要花x单位时间. 有m个罪犯,一开始第i个在点x[i],他们的速度无限快. 如果罪犯和警察到达 ...