编程之美 彩色的树
来源:互联网 发布:ubuntu kylin安装教程 编辑:程序博客网 时间:2024/05/29 17:05
题目1 : 彩色的树
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
- 样例输入
231 22 3312 2 1151 22 32 42 5412 2 12 3 21
- 样例输出
Case #1:13Case #2:1
5
#include<iostream>#include <vector>#include <fstream>using namespace std;const int maxVex = 100010;vector<int> parent[maxVex];vector<int> child[maxVex];int color[maxVex];bool visited[maxVex];int num;//tree node number//ifstream in("/Users/urey/data/input");void create() { int x,y; cin>>num; memset(parent,0,sizeof(parent)); memset(child,0,sizeof(child)); memset(color,0,sizeof(color)); for(int i=1; i<=num-1; i++) { cin>>x>>y; child[x].push_back(y);//x's child is y parent[y].push_back(x);//y's parent is x }}void dfs(int i) { visited[i]=true; for(auto j=child[i].begin();j!=child[i].end();j=next(j)) { if(*j<=num && *j>=1 && color[*j]==color[i] ) { if(!visited[*j]) dfs(*j); } } for(auto j=parent[i].begin();j!=parent[i].end();j=next(j)) { if(*j<=num && *j>=1 && color[*j]==color[i] ) { if(!visited[*j]) dfs(*j); } }}int dfsTraverse() { int ans=0; memset(visited,false,sizeof(visited)); for(int i=1; i<=num; i++) { if(!visited[i]) { dfs(i); ans++; } } return ans;}int main() { int T,q,x,y,ops; cin>>T; for(int i=0; i<T; i++) { create(); cin>>q; cout<<"Case #"<<i+1<<":"<<endl; for(int j=0; j<q; j++) { cin>>ops; if(ops == 1) { cout<<dfsTraverse()<<endl; } if(ops == 2) { cin>>x>>y; color[x]=y; } } } return 0;}
描述
给定一棵n个节点的树,节点编号为1, 2, …, n。树中有n - 1条边,任意两个节点间恰好有一条路径。这是一棵彩色的树,每个节点恰好可以染一种颜色。初始时,所有节点的颜色都为0。现在需要实现两种操作:
1. 改变节点x的颜色为y;
2. 询问整棵树被划分成了多少棵颜色相同的子树。即每棵子树内的节点颜色都相同,而相邻子树的颜色不同。
输入
第一行一个整数T,表示数据组数,以下是T组数据。
每组数据第一行是n,表示树的节点个数。接下来n - 1行每行两个数i和j,表示节点i和j间有一条边。接下来是一个数q,表示操作数。之后q行,每行表示以下两种操作之一:
1. 若为"1",则询问划分的子树个数。
2. 若为"2 x y",则将节点x的颜色改为y。
输出
每组数据的第一行为"Case #X:",X为测试数据编号,从1开始。
接下来的每一行,对于每一个询问,输出一个整数,为划分成的子树个数。
数据范围
1 ≤ T ≤ 20
0 ≤ y ≤ 100000
小数据
1 ≤ n, q ≤ 5000
大数据
1 ≤ n, q ≤ 100000
0 0
- 编程之美15-彩色的树
- 编程之美 彩色的树
- 2015编程之美 彩色的树
- 2015编程之美 彩色的树
- 2015 编程之美彩色的树A
- hihoCoder #1156 : 彩色的树 2015编程之美初赛
- 2015编程之美初赛第一场 A 彩色的树
- hihoCoder 1156 彩色的树 编程之美2015初赛第一场
- 编程之美--树
- 编程之美的诱惑
- 编程之美的题目
- erlang的编程之美
- 编程之美系列之二叉树的分层遍历
- 《编程之美》背后的作者之美
- 编程之美之1的数目
- 编程之美之1的数目
- [编程之美]二叉树的层次遍历
- 编程之美2.5 寻找最大的k个树
- 编程珠玑(开篇)--第一章习题
- 图片会说话系列之Android事件的分发传递机制
- 成员函数中的静态变量 静态成员函数
- .NET Framework版本环境的重要性!
- PHP Web 开发初学者入门
- 编程之美 彩色的树
- SpringMvc 深入讲解 二
- poj 2752——Seek the Name, Seek the Fame
- 关于java的HashMap的问题
- 编程之美 质数相关
- mipmap 目录和drawable 目录有什么区别
- Android学习 - 自定义锁屏demo之滑动解锁
- mini2440硬件篇之PWM定时器
- 引脚太少,想多接几个按键控制怎么办?-----谈单片机AD检测法实现简单实用的按键