当时刚学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. 「ZJOI2006」物流运输

    题目 [内存限制:$256MiB$][时间限制:$1000ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] [题目描述] 物流公司要把一批货物从码头 A 运到码头 B.由于货物量比较 ...

  2. 【快学springboot】7.使用Spring Boot Jpa

    jpa简介 Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范.它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据. ...

  3. css 图形样式

    参考:https://css-tricks.com/examples/ShapesOfCSS/

  4. css常用设置

    距离左边和上边 style="margin-left:100px;margin-top:10px" 设置相对位置 position:absolute; position:relat ...

  5. 使用Hibernate+MySql+native SQL的BUG,以及解决办法

      本来是mssql+hibernate+native SQL 应用的很和谐 但是到了把mssql换成mysql,就出了错(同样的数据结构和数据). 查询方法是: String sql = " ...

  6. WIN2008中部署网站后样式及JS加载不了(转载)

    今天在一台刚刚装好的WIN2008上部署一个问题,一切按流程来:① 控制面板加IIS,把.NET 3.5打勾② 装.NET 4.0框架③ 装MSSQL2012④ IIS中部署网站⑤ 修改web.con ...

  7. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:Object类

    class Demo{ // 定义Demo类,实际上就是继承了Object类 }; public class ObjectDemo01{ public static void main(String ...

  8. 如何给谷歌浏览器安装vue-devtools插件

    感谢原作者:https://www.cnblogs.com/alice-fee/p/8038367.html 安装方法1: 需正常打开chrome商店,搜索vuejs devtools 安装.chro ...

  9. Python3 中 的 绝对导入 与 相对导入

    背景: 在学习tf的时候,看到了from __future__ import absolute_import,所以登记学习一下. 概览: 一般模块导入规则: import xxx时搜索文件的优先级如下 ...

  10. KAZE特征和各向异性扩散滤波

    kaze feature: http://www.doc88.com/p-6911376909693.html 各向异性扩散滤波  Scale-space and edge detection usi ...