当时刚学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. JAVA 数据库操作工具类----sqllite

    package com.asc.db; import android.content.ContentValues; import android.content.Context; import and ...

  2. 第1节 storm编程:4、storm环境安装以及storm编程模型介绍

    dataSource:数据源,生产数据的东西 spout:接收数据源过来的数据,然后将数据往下游发送 bolt:数据的处理逻辑单元.可以有很多个,基本上每个bolt都处理一部分工作,然后将数据继续往下 ...

  3. redis-String字符串

    存储类型:可以用来存储字符串.整数.浮点数. 常用命令: 1. SET key value [EX seconds] [PX milliseconds] [NX|XX] 1.1 EX seconds ...

  4. JDBC--调用函数&存错过程

    1.通过Connection对象的prepareCall()方法创建CallableStatement对象的实例,在使用prepareCall()方法时需传入一个String类型的字符串,该字符串用于 ...

  5. 导弹拦截p1020(LIS问题)

    题目描述(题目链接:https://www.luogu.org/problem/P1020) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够 ...

  6. ADS 2015破解方法--笔记

    关键步骤是:设定系统环境变量HPEESOF_LIC_DIR,然后重启,再打开License Manager进行License的添加

  7. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片:图片响应式 (将很好地扩展到父元素)

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

  8. Uncaught Error: Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3

    前端导入静态页面的时候有一个报错,主要问题是冲突了 Uncaught Error: Bootstrap's JavaScript requires jQuery version 1.9.1 or hi ...

  9. Mozilla Firefox 68 正式发布下载:对刚Chrome

    Mozilla Firefox 68开源和跨平台Web浏览器现在正式发布,可以下载适用于GNU/Linux,Mac和Windows平台的Firefox 68了. Firefox 68网络浏览器现在可以 ...

  10. SpringCloud实战——(1)创建SpringCloud项目

    首先创建一个SpirngCloud工程,并添加公用依赖. <?xml version="1.0" encoding="UTF-8"?> <pr ...