CF1029E Tree with Small Distances (贪心)
题目大意:给你一棵边权为1的树,让你加入一些边,使得根节点(1号节点)到其他节点的最短距离不大于2
并没有想到贪心......
正解的贪心思路是这样的
用一个堆维护当前距离最远的点,然后把根节点和它的父节点连起来
这样,父节点周围一圈的节点到根的距离都不大于2,把这些节点都从堆里删除
实际操作的时候,并不需要删除它们,只需要把它们标记一下,等它们弹出堆的时候,continue即可
不断按照这个思路贪心,直到所有节点到根的距离都不大于2即可
#include <set>
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200010
#define ll long long
using namespace std;
//re
int gint()
{
int ret=,fh=;char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&c<=''){ret=ret*+c-'';c=getchar();}
return ret*fh;
}
int n,m,K,ma,cte,num;
int head[N],vis[N],use[N],dis[N],fa[N];
struct Edge{int to,nxt,val;}edge[N*];
void ae(int u,int v){
cte++;edge[cte].to=v;
edge[cte].nxt=head[u],head[u]=cte;}
struct node{
int id,d;
friend bool operator<(const node &s1,const node &s2)
{return s1.d<s2.d;}
node(int id,int d):id(id),d(d){} node(){}
};
void bfs()
{
queue<int>q;q.push();
while(!q.empty())
{
int u=q.front();q.pop();
for(int j=head[u];j;j=edge[j].nxt){
int v=edge[j].to;
if(v==fa[u]) continue;
fa[v]=u,dis[v]=dis[u]+;
q.push(v);
}
}
}
int solve()
{
priority_queue<node>q;
for(int i=;i<=n;i++)
if(dis[i]>) q.push(node(i,dis[i]));
int ans=;
while(!q.empty())
{
node k=q.top();q.pop();
int x=k.id,y=fa[x];
if(vis[x]) continue; vis[x]=;
dis[y]=,vis[y]=,ans++;
for(int j=head[y];j;j=edge[j].nxt){
int v=edge[j].to;
dis[v]=min(dis[v],),vis[v]=;
q.push(node(v,dis[v]));
}
}return ans;
} int main()
{
scanf("%d",&n);
int x,y,z,fx;
for(int i=;i<n;i++)
x=gint(),y=gint(),ae(x,y),ae(y,x);
bfs();
printf("%d\n",solve());
return ;
}
CF1029E Tree with Small Distances (贪心)的更多相关文章
- CF1029E Tree with Small Distances
题目描述 给定一棵树.要求往树中加入一些边使得从1到其他节点的距离至多是2 . 输出加入边的最小数量.(边全部都是无向的) 题解:好多人都说是贪心,但是我写的是树形dp. (这道题实在太像小胖守皇宫了 ...
- 树的最小支配集 E - Cell Phone Network POJ - 3659 E. Tree with Small Distances
E - Cell Phone Network POJ - 3659 题目大意: 给你一棵树,放置灯塔,每一个节点可以覆盖的范围是这个节点的所有子节点和他的父亲节点,问要使得所有的节点被覆盖的最少灯塔数 ...
- 贪心【CF1029E】Tree with Small Distances
Description 给定一棵树.要求往树中加入一些边使得从1到其他节点的距离至多是2 . 输出加入边的最小数量.(边全部都是无向的) Input 第一行一个整数n,表示树中的节点个数. 接下来n− ...
- Tree with Small Distances(cf1029E)(树形动规)
You are given an undirected tree consisting of \(n\) vertices. An undirected tree is a connected und ...
- CF E .Tree with Small Distances(树上的贪心)
题意: 这是一颗有n-1条边的无向树 , 在树上加最少的边使树的1节点到其他节点的距离最多为 2 : 分析:很容易考虑的贪心的做法,但是该如何的贪心呢 ? 我一开始是打算贪心节点的儿子最多那一个 , ...
- codeforces 1029E Tree with Small Distances【思维+贪心】 【非原创】
题目:戳这里 学习博客:戳这里 题意:给一个树加最少的边,使得1到所有点的距离小于等于2. 解题思路:分析样例3可以看出,如果一个点到1的距离大于2,那么建立1到该点的父亲节点的边将比直接与该点建边更 ...
- CF1039D You Are Given a Tree 根号分治,贪心
CF1039D You Are Given a Tree LG传送门 根号分治好题. 这题可以整体二分,但我太菜了,不会. 根号分治怎么考虑呢?先想想\(n^2\)暴力吧.对于每一个要求的\(k\), ...
- [POJ2054]Color a Tree (并查集+贪心)
POJ终于修好啦 题意 和UVA1205是同一题,在洛谷上是紫题 有一棵树,需要给其所有节点染色,每个点染色所需的时间是一样的都是11.给每个点染色,还有一个开销“当前时间×ci×ci”,cici是每 ...
- Codeforces 429C Guess the Tree(状压DP+贪心)
吐槽:这道题真心坑...做了一整天,我太蒻了... 题意 构造一棵 $ n $ 个节点的树,要求满足以下条件: 每个非叶子节点至少包含2个儿子: 以节点 $ i $ 为根的子树中必须包含 $ c_i ...
随机推荐
- CF960F Pathwalks_权值线段树_LIS
很不错的一道思维题. Code: #include<cstdio> #include<algorithm> #include<iostream> using nam ...
- [luogu2501 HAOI2006] 数字序列 (递推LIS)
题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. 输入输出格式 输入格式: 第一行包含一个数 ...
- cf掉分记——Avito Code Challenge 2018
再次作死的打了一次cf的修仙比赛感觉有点迷.. 还好掉的分不多(原本就太低没法掉了QAQ) 把会做的前三道水题记录在这.. A: Antipalindrome emmmm...直接暴力枚举 code: ...
- Linux系统_Ubuntu中Hadoop常用命令
ctrl+alt+t打开终端窗口sudo useradd -m hadoop -s/bin/bash创建新用户ctrl+alt回到自己的笔记本 创建hadoop用户sudo useradd -m ha ...
- 新手学python-Day4-进制,数据类型,编码转换,列表
python3中字符串的编码转换 names=b'\xe2\x82\xac20'.decode('utf-8') print(names) names='€20'.encode('utf-8') pr ...
- STM32CubeMx的使用分享
1. 新建立工程(以F103ZET6为例) 2. 配置引脚(以PA0为例) 3. 配置外设(以串口为例) 4. 配置时钟 5. 外设.GPIO.中断初始化 6. 生成工程 7. 添加自己的代码 8 ...
- IE9以下版本兼容h5标签
随着html5(后面用h5代表)标签越来越广泛的使用,IE9以下(IE6-IE8)不识别h5标签的问题让人很是烦恼. 在火狐和chrome之类的浏览器中,遇到不认识的标签,只要给个display:bl ...
- 如何在 Linux 上安装 Nginx (源码安装)
如何在 Linux( CentOS ) 上安装 Nginx 1.下载 nginx 链接 : https://pan.baidu.com/s/1sll0Hrf 密码 : xnem 2.安装 gcc ( ...
- ASP.NET-Microsoft.Management.Infrastructure错误
错误如图所示,将MVC发布到IIS上就会出现这个错误,我用到了NPOI这个EXCEL插件,不知道是不是这个造成的,但是实在找不到解决方案,就直接将BIN目录下的这个Microsoft.Manageme ...
- angular-API
AngularJS 全局 API 用于执行常见任务的 JavaScript 函数集合,如: 比较对象 迭代对象 转换对象 API 描述 angular.lowercase() 转换字符串为小写 ang ...