http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4045

题意:给一棵树。这棵树有n个节点,问你这个图能不能分成k个分块。这个分块内所有的节点都至少与一个该块中的其他节点有一条边相连。

题目分析:由于是无根树,所以可以随便选取一个结点作为根节点,然后dfs往下搜索,搜索过程不容易划分哪些结点和哪些结点是一块,而利用搜索到叶子结点之后往上回溯的过程,每累积n/k个点就划分一次,就很容易划分出结点块.这道题也主要是利用了dfs的回溯过程.(很多不容易正向解决的问题回溯起来很容易得到解决)

 #include <iostream>
#include <iomanip>
#include <algorithm>
#include <map>
#include <vector>
#include <string>
#include <set>
#include<cstdio>
#include <cmath>
#include<cstring>
using namespace std;
typedef long long ll;
bool vis[];
int dp[];
vector<int>G[];
int dfs(int u,int k){
vis[u]=;
int t=;
for(int i=;i<G[u].size();i++){
if(!vis[G[u][i]]){
t+=dfs(G[u][i],k);
}
}
dp[u]=t;
if(dp[u]==k){
dp[u]=;
}
return dp[u];
}
void dfs_ans(int u,int fa){
if(dp[u]==&&u!=fa)return;
vis[u]=;
if(u!=fa){
printf(" %d",u);
}
for(int i=;i<G[u].size();i++){
if(!vis[G[u][i]]){
dfs_ans(G[u][i],u);
}
}
}
int main(){
//freopen("in.txt","r",stdin);
ios_base::sync_with_stdio();
cin.tie(NULL);
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
// cout <<n<<k<<endl;
for(int i=;i<=n;i++)G[i].clear();
memset(vis,,sizeof(vis));
memset(dp,,sizeof(dp));
for(int i=;i<n-;i++){
int a,b;
cin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
dfs(,k);
memset(vis,,sizeof(vis));
//for(int i=0i<n;i++){if(dp[i]==0){dp[i]=1;printf("%d",i);dfs(i,k,i);dp[i]=0;}
if(dp[]==){
printf("YES\n");
for(int i=;i<=n;i++){
if(dp[i]==){
printf("%d",i);
dfs_ans(i,i);
printf("\n");
} }
}
else{
printf("NO\n");
}
}
return ;
}

[zoj4045][思维+dfs]的更多相关文章

  1. CF D. Fair(思维+DFS)

    http://codeforces.com/contest/987/problem/D 题目大概: 给出一个n个城镇m条边的图,给出每个城镇拥有的特产(可能多个城镇有相同特产).有k种不同特产. 要求 ...

  2. ZOJ 4124 拓扑排序+思维dfs

    ZOJ - 4124Median 题目大意:有n个元素,给出m对a>b的关系,问哪个元素可能是第(n+1)/2个元素,可能的元素位置相应输出1,反之输出0 省赛都过去两周了,现在才补这题,这题感 ...

  3. Codeforces542E Playing on Graph 思维+DFS+BFS

    解法参考https://www.cnblogs.com/BearChild/p/7683114.html这位大佬的,这位大佬讲得很好了. 这道题还是有一定的思维的. 直接贴代码: #include&l ...

  4. Trips CodeForces - 1037E(思维dfs)

    题意: 就是几个人去旅游,组队的条件是对于某个队员 队里至少有两个是他的朋友,每天早晨都会有一对新人成为朋友 解析: 用set标记互为朋友 a[i] b[i] 表示在第i天早晨 u和v成为朋友 先求最 ...

  5. #537 (Div. 2) Creative Snap (思维+dfs)

    https://codeforces.com/contest/1111/problem/C 横坐标1..2^n对应着2^n个复仇者的基地,上面有k个复仇者(位置依次给出).你是灭霸你要用以下方法消灭这 ...

  6. 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)

    Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...

  7. hdu6446 Tree and Permutation 2018ccpc网络赛 思维+dfs

    题目传送门 题目描述:给出一颗树,每条边都有权值,然后列出一个n的全排列,对于所有的全排列,比如1 2 3 4这样一个排列,要算出1到2的树上距离加2到3的树上距离加3到4的树上距离,这个和就是一个排 ...

  8. HDU-4705 Y(思维+dfs树)

    Input 4 1 2 1 3 1 4 Output 1 题意:给你一颗树,选择一个三个点构成的集合,使得这三个点不在一条直线上(意思就是 从一个点出发,用一条不回头的线不能将这三个点连起来)问一共有 ...

  9. CodeM 美团资格赛 思维 dfs

    链接:https://www.nowcoder.com/acm/contest/138/C来源:牛客网 世界杯就要开始啦!真真正正的战斗从淘汰赛开始,现在我们给出球队之间的胜负概率,来预测每支球队夺冠 ...

随机推荐

  1. python之路 ---计算机硬件基础

    计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.一个 ...

  2. day3-PyCharm 断点 调试模式

    上篇学习了Python的工具选择,PyCharm的基本设置,简单的了解了下PyCharm的调试模式,今天主要学习下PyCharm的调式模式,在以后的开发中是一个非常重要的工具. [运行]和[调试]前的 ...

  3. [HDU3726]Graph and Queries

    Problem 给你一张图,点的权值,边和几个操作: D x: 删除第x条边 Q x y: 询问包含x的联通块中权值第y大的权值 C x y: 将x这个点的权值改为y Solution 一看就要离线处 ...

  4. JXL生成Excel,并提供下载(2:提供下载)

    实现效果: 项目中使用JXL生成Excel,使生成的Excel可以让用户下载,如下图 一.生成Excel 二.提供下载 实现思路: 1.页面使用form表单提交方式(Ajax提交方式,我这里不行) 2 ...

  5. RabbitMQ 简单的消息发送与接收

    RabbitMQ是建立在AMQP(Advanced Message Queuing Protocol,高级消息队列协议)基础上的,而AMQP是建立在TCP协议之上的. 因此,RabbitMQ是需要建立 ...

  6. C++基础知识:构造与析构

    1.构造函数的定义: C++中的类可以定义与类名相同的特殊成员函数这种与类名相同的成员函数叫做构造函数构造函数在定义时可以有参数,但是没有任何返回类型的声明 2.构造函数的调用: 一般情况下C++编译 ...

  7. c++的读入txt文件(转)

    因为学姐的项目需要,要用到excel的读入读出,百度过后发现txt的读入读出比较简单,于是,我采用了先把excel转成txt,然后再读入. 方法是csdn上的天使的原地址:   https://blo ...

  8. 使用kafka和zookeeper 构建分布式编译环境

    1:在每台机器上安装jdk, 脚本代码如下: 每一个机器上下载jdk,zookeeper,kafka 链接:https://www.oracle.com/technetwork/java/javase ...

  9. 12.Python爬虫利器三之Xpath语法与lxml库的用法

    LXML解析库使用的是Xpath语法: XPath 是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 XPath可以用来提取信息 XPath比 ...

  10. 7.Python 正则表达式学习笔记

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...