[zoj4045][思维+dfs]
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]的更多相关文章
- CF D. Fair(思维+DFS)
http://codeforces.com/contest/987/problem/D 题目大概: 给出一个n个城镇m条边的图,给出每个城镇拥有的特产(可能多个城镇有相同特产).有k种不同特产. 要求 ...
- ZOJ 4124 拓扑排序+思维dfs
ZOJ - 4124Median 题目大意:有n个元素,给出m对a>b的关系,问哪个元素可能是第(n+1)/2个元素,可能的元素位置相应输出1,反之输出0 省赛都过去两周了,现在才补这题,这题感 ...
- Codeforces542E Playing on Graph 思维+DFS+BFS
解法参考https://www.cnblogs.com/BearChild/p/7683114.html这位大佬的,这位大佬讲得很好了. 这道题还是有一定的思维的. 直接贴代码: #include&l ...
- Trips CodeForces - 1037E(思维dfs)
题意: 就是几个人去旅游,组队的条件是对于某个队员 队里至少有两个是他的朋友,每天早晨都会有一对新人成为朋友 解析: 用set标记互为朋友 a[i] b[i] 表示在第i天早晨 u和v成为朋友 先求最 ...
- #537 (Div. 2) Creative Snap (思维+dfs)
https://codeforces.com/contest/1111/problem/C 横坐标1..2^n对应着2^n个复仇者的基地,上面有k个复仇者(位置依次给出).你是灭霸你要用以下方法消灭这 ...
- 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)
Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...
- hdu6446 Tree and Permutation 2018ccpc网络赛 思维+dfs
题目传送门 题目描述:给出一颗树,每条边都有权值,然后列出一个n的全排列,对于所有的全排列,比如1 2 3 4这样一个排列,要算出1到2的树上距离加2到3的树上距离加3到4的树上距离,这个和就是一个排 ...
- HDU-4705 Y(思维+dfs树)
Input 4 1 2 1 3 1 4 Output 1 题意:给你一颗树,选择一个三个点构成的集合,使得这三个点不在一条直线上(意思就是 从一个点出发,用一条不回头的线不能将这三个点连起来)问一共有 ...
- CodeM 美团资格赛 思维 dfs
链接:https://www.nowcoder.com/acm/contest/138/C来源:牛客网 世界杯就要开始啦!真真正正的战斗从淘汰赛开始,现在我们给出球队之间的胜负概率,来预测每支球队夺冠 ...
随机推荐
- 适应c++ 新特性 - 与我 - 多年传统方式开发(新特性参考微软标准:https://msdn.microsoft.com/zh-cn/library/hh279654.aspx)
公司同事都在积极使用c++的新特性,并对其赞不绝口,而自己一直做着传统的c++开发方式,到底这些新特性如何,又是怎么提高开发效率的,我依然在疑问当中,从同事的说法和实际代码操练里,确实在减少代码量,集 ...
- Java正则表达式的总结
Java正则表达式,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容. 判断用户的输入是否符合实际需求. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.] ...
- BOM浏览器操作对象
BOM定义 一.定时器 1) 定时器1:setInterval() 2)一次性定时器 二.offset.scroll.client
- 完全卸载vs2013 2015
/uninstall /force 解压你的vs2013的安装包(iso格式). cd到解压后的文件夹 vs_ultimate.exe /uninstall /force 或者创建一个快捷方式到桌面 ...
- SQL-38 创建视图
题目描述 针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_n ...
- [HAOI2006]l旅行
这道题...一眼看出一个暴力思虑...那就是按照生成树... 排完序之后从当前边开始向后做生成树... 统计一下答案就好了... 结果...这就是正解...QVQ...smg...我去... 呆码: ...
- mysql修改lower_case_table_names产生的问题
1.参数含义: lower_case_table_names: 此参数不可以动态修改,必须重启数据库 lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区 ...
- L251
Beer before wine, or wine before beer; whatever the order, you’ll feel queer. That, at least, is the ...
- day 74 json 和 ajax 的实例
一 json的定义: json(JavaScript object notation,js对象标记)是一种轻量级的数据交换格式,它基于ecmascript(w3c指定的js规范)的一个子集,采用完全独 ...
- mysql创建用户以及授权
Mysql新建用户操作 方法一: mysql> insert into mysql.user(Host,User,Password) values("localhost", ...