不充钱,你怎么AC?

  题目:http://codevs.cn/problem/1091/

  大家都写的 DFS,然而我想到了一种贪心的做法,重点是可以A

  普遍的贪心是每次删掉该深度子树最大的点,但是如果有一边卡一条链就会WA

  我们何不进一步考虑贪心,如果它下面是一条链我们就可以缓一缓到第 2 天再删是不是,反正它每次也就增加一个人

  用 size[x] 记录所有后代加上自己的节点个数,f[x] 记录其最大子树的 size 值

  我们考虑第一次不删这个节点,让它先扩展一次,然后第二次再删除它子树中 size 最大的节点

  那么设 g[x]=size[x]-f[x],g 就为第一次不删,第二次删掉其最大的子树还剩余的节点数

  一条链的 g[x]=1,而一个多叉节点的 g[x]>1,这就意味着先要删去 g 值更大的那个节点,才能不让它下一次扩展更多的出来

  那么一层层地贪心,每次删掉 g 值最大的节点,直到不再继续传染为止

  贪心跑得飞快~

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<stack>
using namespace std; const int N=;
stack<int> s,q;
int first[N],v[N*],next[N*],size[N],g[N],f[N];
void dfs(int x,int fa)
{
f[x]=fa;
int i;
for (i=first[x];i;i=next[i])
{
if (v[i]==fa) continue;
dfs(v[i],x);
if (size[v[i]]>g[x]) g[x]=size[v[i]];
}
size[fa]+=size[x];
}
int main()
{
int n,m,i,x,ans=;
scanf("%d%d",&n,&m);
for (i=;i<=m;i++)
{
scanf("%d%d",&x,&v[i]);
v[i+m]=x;
next[i]=first[x];
first[x]=i;
next[i+m]=first[v[i]];
first[v[i]]=i+m;
}
for (i=;i<=n;i++) size[i]=;
dfs(,);
for (i=;i<=n;i++) g[i]=size[i]-g[i];
s.push();
g[]=size[]=;
ans=n;
while (!s.empty())
{
m=;
while (!s.empty())
{
x=s.top();
s.pop();
for (i=first[x];i;i=next[i])
{
if (v[i]==f[x]) continue;
if (g[v[i]]>g[m]||(g[v[i]]==g[m]&&size[v[i]]>size[m])) m=v[i];
q.push(v[i]);
}
}
while (!q.empty())
{
x=q.top();
q.pop();
if (x==m) ans-=size[m];
else s.push(x);
}
}
printf("%d\n",ans);
return ;
}

  这里有个DFS的:http://blog.csdn.net/yuyanggo/article/details/48087431

  贪心的做法证明有人会严谨的吗?会的话告诉我谢谢!

[ CodeVS冲杯之路 ] P1091的更多相关文章

  1. [ CodeVS冲杯之路 ] P1368

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1368/ 嗯……泡泡堂,很劲啊,其实就是个盗版的田忌赛马 http://www.cnblogs.com/hyfer/p/ ...

  2. [ CodeVS冲杯之路 ] P1092

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1092/ 嗯,这道题有一定难度啊,需要先用扩展欧几里得算法求出逆元,然后按照大小构一颗带边权为小时数的树 树链剖分后在树 ...

  3. [ CodeVS冲杯之路 ] P3955

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/3955/ 最长上升子序列的加强版,n 有1000000,n 方的 DP 肯定会 TLE,那么用二分栈维护 二分栈我讲不好 ...

  4. [ CodeVS冲杯之路 ] P1165

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1165/ 题目很简单,代码最好写朴实一点,不要想着哪些情况可以合并在一起啊等等 老老实实一个个判断,不然很容易出错 细节 ...

  5. [ CodeVS冲杯之路 ] P1053

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1053/ 直接扫一遍串,把字母对应的 ascii 码直接做数组下标,交给数组统计 最后查询一遍数组的 'a'-'z' , ...

  6. [ CodeVS冲杯之路 ] P1171

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1171/ 代码调了很久才调好啊,一开始题目都看错了(要是真的NOIP肯定没戏了QuQ) 后面发现CodeVS上的数据输入 ...

  7. [ CodeVS冲杯之路 ] P1197

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1197/ 密钥的字母可以全转换为小写字母,然后一一映射,a→0,b→1,c→2,依此类推 对于密文只需将每一位减去对应密 ...

  8. [ CodeVS冲杯之路 ] P2492

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/2492/ 在此先orz小胖子,教我怎么路径压缩链表,那么这样就可以在任意节点跳进链表啦(手动@LCF) 对于查询操作,直 ...

  9. [ CodeVS冲杯之路 ] P2456

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/2456/ 用贪心的思想,木材当然要尽量分成多的木板,而大的木材能够分成大木板,但是小的木材不一定能够分成大的木板,所以木 ...

随机推荐

  1. ListView Viewholder的坑 线性布局的坑

    1.ListView Viewholder的坑 /** * 默认带图片的menu adapter */ public static class MenuImageAdapter extends Bas ...

  2. 把实体bean对象转换成DBObject工具类

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util ...

  3. Column 'sort' specified twice错误

    我使用的是mybatis框架出现的这个问题,如果你们也出现了这个问题的豪华,我想你们的sql代码一定是复制的吧,额哈哈哈

  4. Postman-进阶(2)

    Postman-进阶(2) Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins 管理请求 保存请求-添加“打开百度首页请求” 设置请求方式为Get,地址为www ...

  5. [shell]查找网段内可用IP地址

    #网段可用IP地址 #!/bin/sh ip= " ]; do .$ip -c |grep -q "ttl=" && echo "10.86.8 ...

  6. winform-实现类似QQ停靠桌面上边缘隐藏的效果

    //实现类似QQ停靠桌面上边缘隐藏的效果! private void timer1_Tick(object sender, EventArgs e) { System.Drawing.Point pp ...

  7. Python全栈工程师(异常(基础))

    ParisGabriel                每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰     Python人工智能从入门到精通 补充:包的相对导入 只对后两种导入方式有用 ...

  8. cloud.cfg_for_ubuntu

    user: default disable_root: false preserve_hostname: false cloud_init_modules: - bootcmd - resizefs ...

  9. [转载]kd tree

    [本文转自]http://www.cnblogs.com/eyeszjwang/articles/2429382.html k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据 ...

  10. python使用工具简介介绍

    我从研究生开学以来就开始在学python,现在来简单分享下一些基本的使用命令和快捷方式 Pycharm: 运行程序 ctrl+alt+F10 删除一行ctrl+D 注释ctrl+/ 安装python所 ...