当时刚学LCA-tarjan不久,就比赛有这个题,但没想到还是没做出来。。一开始以为是DP来着,没想到是贪心,想想也对,从树的最下层开始,每次遇到询问的点,就找到他们的LCA(路径里面必经LCA),然后把该LCA下的子树连同自己全部染色为不可用了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int N = (+)*;
int u[N],v[N],ft[N],nt[N],cnt;
int dep[N];
vector<int> G[N];
void add(int a,int b)
{
u[cnt]=a;
v[cnt]=b;
nt[cnt]=ft[a];
ft[a]=cnt++;
}
int f[N];
int anc[N];
int vis[N],col[N];
struct edge
{
int a,b,anc,dep;
bool operator < (const edge& rhs) const{
return dep>rhs.dep;
}
}E[N];
int findset(int x)
{
if (x!=f[x]){
f[x]=findset(f[x]);
}
return f[x];
}
int unionset(int a,int b)
{
int r1=findset(a);
int r2=findset(b);
if (r1==r2) return r1;
f[r2]=r1;
return r1;
}
void tarjan(int x,int fa)
{
anc[x]=x;
for (int i=ft[x];i!=-;i=nt[i]){
int nx=v[i];
if (nx==fa) continue;
tarjan(nx,x);
int rt=unionset(x,nx);
anc[rt]=x;
}
col[x]=;
for (int i=;i<G[x].size();i++){
int ii=G[x][i];
int nx=E[ii].a^E[ii].b^x;
if (col[nx]){
E[ii].anc=findset(nx);
E[ii].dep=dep[E[ii].anc]; }
}
}
void dfs1(int x,int fa,int d)
{
dep[x]=d;
for (int i=ft[x];i!=-;i=nt[i]){
int vx=v[i];
if (vx==fa) continue;
dfs1(vx,x,d+);
}
}
void dfs2(int x)
{
vis[x]=;
for (int i=ft[x];i!=-;i=nt[i]){
int vx=v[i];
if (dep[vx]<dep[x] || vis[vx]) continue;
dfs2(vx);
}
}
int main()
{
int n,m,a,b;
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(ft,-,sizeof(ft));
memset(vis,,sizeof(vis));
memset(col,,sizeof(col));
cnt=;
for (int i=;i<n;i++){
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
G[i].clear();
f[i]=i;
}
dfs1(,-,);
G[n].clear();
f[n]=n;
for (int i=;i<m;i++){
scanf("%d%d",&a,&b);
G[a].push_back(i);
G[b].push_back(i);
E[i].a=a;
E[i].b=b;
}
tarjan(,-);
sort(E,E+m);
int ans=;
for (int i=;i<m;i++){
if (!vis[E[i].a] && !vis[E[i].b]){
ans++;
dfs2(E[i].anc);
}
}
printf("%d\n",ans);
}
return ;
}

HDU_4912 Path on the tree 2014多校5 贪心+LCA的更多相关文章

  1. Codechef:Path Triples On Tree

    Path Triples On Tree 题意是求树上都不相交或者都相交的路径三元组数量. 发现blog里没什么树形dp题,也没有cc题,所以来丢一道cc上的树形dp题. 比较暴力,比较恶心 #inc ...

  2. E. Tree Queries 解析(思維、LCA)

    Codeforce 1328 E. Tree Queries 解析(思維.LCA) 今天我們來看看CF1328E 題目連結 題目 給你一棵樹,並且給你\(m\le2e5\)個詢問(包含\(k\)個點) ...

  3. hdu4935 Prime Tree(2014多校联合第七场)

    首先这是一道dp题,对题意的把握和对状态的处理是解题关键. 题目给出的范围是n在1到1e11之间,由于在裂变过称中左儿子总是父亲节点的一个非平凡约数,容易看出裂变过程只与 素数幂有关,并且显然有素数不 ...

  4. 2014多校第六场 1005 || HDU 4925 Apple Tree

    题目链接 题意 : 给你一块n×m的矩阵,每一个格子可以施肥或者是种苹果,种一颗苹果可以得到一个苹果,但是如果你在一个格子上施了肥,那么所有与该格子相邻(指上下左右)的有苹果树的地方最后得到的苹果是两 ...

  5. 113. Path Sum II (Tree; DFS)

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  6. 2014 (多校)1011 ZCC Loves Codefires

    自从做了多校,整个人都不好了,老是被高中生就算了,题老是都不懂=-=原谅我是个菜鸟,原谅我智力不行.唯一的水题. Problem Description Though ZCC has many Fan ...

  7. 【HDU】4923 Room and Moor(2014多校第六场1003)

    Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  8. 路径字符串数据转化为树型层级对象,path to json tree

    由于项目中使用了react 及 ant-design ,在使用tree树型控件时,需要 类似下面的数据, const treeData = [{ title: '0-0', key: '0-0', c ...

  9. hdu 4970 Killing Monsters(数组的巧妙运用) 2014多校训练第9场

    pid=4970">Killing Monsters                                                                   ...

随机推荐

  1. JS实现复制信息到剪贴板

    copy 当用户通过浏览器UI启动复制操作并响应允许的document.execCommand('copy')调用时触发copy事件. copy事件可作用于任何可被选中或可编辑的元素,如body.di ...

  2. Linux学习计划中遇到的问题记录

    随时更新 Linux安装到网络联通遇到的问题及解决办法 1.命令区分大小写 2..网络连通 ping本地 地址遇到问题 解决办法: https://blog.csdn.net/qq_42074075/ ...

  3. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:水平表单

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Py2与Py3的区别

    总结Py2 与Py3 的区别 1 编码区别 在Python2中有两种字符串类型str和Unicode. 默认ASCII python2 str类型,相当于python3中的bytes类型 python ...

  5. jwt 认证

    目录 jwt 认证示意图 jwt 认证算法:签发与检验 drf 项目的 jwt 认证开发流程(重点) drf-jwt 框架基本使用 token 刷新机制(了解) jwt 认证示意图 jwt 优势 1 ...

  6. 启动storm任务时,异常提示

    启动storm任务时,异常提示: 14182 [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2000] WARN o.a.s.s.o.a.z.s.NIOServerCnx ...

  7. 白底黑字!Android浅色状态栏黑色字体模式(另)

    小彬什么都想做任重致远 关注 2016.06.30 10:16* 字数 489 阅读 3234评论 3喜欢 12 前言 由于该死不死的设计湿,设计了一套白色状态栏的UI.当然在iOS上可以实现自适应, ...

  8. 库克承认iPhone销售不佳是因定价太高,但降价能救苹果吗?

    iPhone定价愈来愈高,已经是不争的事实.但iPhone价格的飙升,其实并不是"正常"的.早在乔布斯时代,iPhone的价格维持在5000元左右.虽然看起来价格略高,但也在很多人 ...

  9. [Struts]Token 使用及原理

      Struts Token 使用 1,先在一个Action中,调用saveToken(HttpServletRequest request)方法.然后转向带有表单的JSP页面. 2,在JSP页面提交 ...

  10. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:自适应大小的按钮组

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...