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 ...
随机推荐
- Spring源码解析——循环依赖的解决方案
一.前言 承接<Spring源码解析--创建bean>.<Spring源码解析--创建bean的实例>,我们今天接着聊聊,循环依赖的解决方案,即创建bean的ObjectFac ...
- maven 下载 安装 环境配置
电脑系统:win10 64位 idea 2019 Java 1.8 1.链接地址,我一般都找官网 http://maven.apache.org/download.cgi 截图:注意mav ...
- 灰度级分层(一些基本的灰度变换函数)基本原理及Python实现
1. 基本原理 灰度级分层通常用于突出感兴趣的特定灰度范围内的亮度.灰度级分层有两大基本方法. 将感兴趣的灰度范围内的值显示为一个值(比如0),而其他范围的值为另外一个值(255). 将感兴趣的灰度范 ...
- c++/c关于函数指针
顺便提一句:指针也是一种变量类型 和 int double 这些类型是一个级别 不同的是它的值是地址 #include "stdafx.h"#include<stdlib.h ...
- log4net服务启动后没有记录日志
有时候在用log4net的时候,调试或执行是ok的,但是安装服务后没有记录日志. 这是因为服务启动是在C盘启动,而程序放的位置在别的目录. 这时候需要指定读取配置文件的位置为程序所在的目录 strin ...
- 浅谈IDEA搭建SSM框架的集成
前言 学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据 ...
- 物流运输trans「ZJOI2006」
[题目描述] 物流公司要把一批货物从码头\(A\)运到码头\(B\).由于货物量比较大,需要\(n\)天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运 ...
- Cocos2d-x 学习笔记(3.2) TransitionScene 过渡场景和场景切换的过程
1. 简介 过渡场景TransitionScene直接继承了场景Scene.能够在场景切换过程中实现“过渡”效果,而不是让窗口在下一帧突然展示另一个场景. 2. create 构造函数: Transi ...
- HTTP与HTTPS之面试必备
本文主要讲解Http与https的区别,以及https是怎样加密来保证安全的. 首先讲这俩个协议的简单区别: HTTP:超文本传输协议. HTTPS:安全套接字层超文本传输协议HTTP+SSL HTT ...
- Scrum Master如何让敏捷团队正常运转?
官方<Scrum指南>中定义:Scrum Master在Scrum团队中属于服务型领导,负责践行和支持<Scrum指南>中定义的Scrum,要帮团队的每个人理解Scrum理论. ...