当前位置:网站首页>HDU 4912 paths on the tree (lca+)
HDU 4912 paths on the tree (lca+)
2022-07-06 21:58:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm the king of the whole stack .
Serie A Champion : It makes the tree grow m route , When asked to choose as many paths as possible , And these paths don't intersect .
reflection : greedy , It's sad . First of all, let's find the number of each pair of paths lca. according to lca The order of the number of layers . At the deeper level, the priority is higher . Then you can be greedy , Choose the one with the deepest number of layers each time , Suppose two endpoints are not marked , Then choose this path , hold lca All subtrees of are marked out .
Code :
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<cmath>
#include<vector>
#define inf 0x3f3f3f3f
#define Inf 0x3FFFFFFFFFFFFFFFLL
#define eps 1e-9
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
const int maxn=100000+10;
struct Edge
{
int v,next;
Edge(int v=0,int next=0):v(v),next(next){}
}edges[maxn<<1];
struct Node
{
int u,v,id;
Node(int u=0,int v=0,int id=0):u(u),v(v),id(id) {}
}node[maxn];
int head[maxn],nEdge;
int LCA[maxn],pa[maxn],d[maxn];
bool vis[maxn];
vector<pair<int,int> >querys[maxn];
int Find(int x)
{
return x==pa[x]?x:pa[x]=Find(pa[x]);
}
void AddEdges(int u,int v)
{
edges[++nEdge]=Edge(v,head[u]);
head[u]=nEdge;
edges[++nEdge]=Edge(u,head[v]);
head[v]=nEdge;
}
void dfs(int u,int fa)
{
pa[u]=u;
pair<int,int>pii;
for(int i=0;i<(int)querys[u].size();++i)
{
pii=querys[u][i];
if(d[pii.first]==-1) continue;
LCA[pii.second]=Find(pii.first);
}
for(int k=head[u];k!=-1;k=edges[k].next)
{
int v=edges[k].v;
if(v==fa) continue;
d[v]=d[u]+1;
dfs(v,u);
pa[v]=u;
}
}
bool cmp(Node a,Node b)
{
int u=LCA[a.id];
int v=LCA[b.id];
return d[u]>d[v];
}
void Init(int n)
{
memset(vis,0,sizeof(vis));
memset(head,0xff,sizeof(head));
nEdge=-1;
memset(d,0xff,sizeof(d));
for(int i=0;i<=n;++i)
querys[i].clear();
}
void tour(int u)
{
vis[u]=true;
for(int k=head[u];k!=-1;k=edges[k].next)
{
int v=edges[k].v;
if(vis[v]||d[v]<d[u]) continue;
tour(v);
}
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int n,m;
while(~scanf("%d%d",&n,&m))
{
Init(n);
int u,v;
for(int i=1;i<n;++i)
{
scanf("%d%d",&u,&v);
AddEdges(u,v);
}
for(int i=0;i<m;++i)
{
scanf("%d%d",&u,&v);
querys[u].push_back(make_pair(v,i));
querys[v].push_back(make_pair(u,i));
node[i].u=u;node[i].v=v;
node[i].id=i;
}
d[1]=0;
dfs(1,-1);
sort(node,node+m,cmp);
int cnt=0;
for(int i=0;i<m;++i)
{
if(!vis[node[i].u]&&!vis[node[i].v])
{
cnt++;
tour(LCA[node[i].id]);
}
}
printf("%d\n",cnt);
}
return 0;
}
Copyright notice : This article is the original article of the blogger , Blog , Do not reprint without permission .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/117044.html Link to the original text :https://javaforall.cn
边栏推荐
- GPS从入门到放弃(十七) 、对流层延时
- Tips for web development: skillfully use ThreadLocal to avoid layer by layer value transmission
- Explain ESM module and commonjs module in simple terms
- Basic introduction of figure
- Checkpoint of RDD in spark
- C语言:#if、#def和#ifndef综合应用
- 1292_ Implementation analysis of vtask resume() and xtask resume fromisr() in freeros
- Why is the cluster mode of spark on Yan better than the client mode
- JPEG2000-Matlab源码实现
- MySQL related terms
猜你喜欢
PostgreSQL install GIS plug-in create extension PostGIS_ topology
【MySQL】Online DDL详解
GPS從入門到放弃(十三)、接收機自主完好性監測(RAIM)
华为在多个行业同时出击,吓人的技术让欧美企业瑟瑟发抖
It's not my boast. You haven't used this fairy idea plug-in!
GPS du début à l'abandon (XIII), surveillance autonome de l'intégrité du récepteur (raim)
GPS from entry to abandonment (XIV), ionospheric delay
numpy 下载安装
jvm:大对象在老年代的分配
Shell product written examination related
随机推荐
小满网络模型&http1-http2 &浏览器缓存
Record the process of cleaning up mining viruses
GPS从入门到放弃(十六)、卫星时钟误差和卫星星历误差
SQL:存储过程和触发器~笔记
HDU 2008 数字统计
Basic introduction of figure
14 years Bachelor degree, transferred to software testing, salary 13.5k
[Chongqing Guangdong education] Tianjin urban construction university concrete structure design principle a reference
Earned value management EVM detailed explanation and application, example explanation
GPS from getting started to giving up (XV), DCB differential code deviation
GPS from entry to abandonment (XVII), tropospheric delay
抖音將推獨立種草App“可頌”,字節忘不掉小紅書?
What is the difference between animators and animators- What is the difference between an Animator and an Animation?
The golden age of the U.S. technology industry has ended, and there have been constant lamentations about chip sales and 30000 layoffs
numpy 下载安装
GPS from getting started to giving up (XX), antenna offset
C language: comprehensive application of if, def and ifndef
GPS from getting started to giving up (19), precise ephemeris (SP3 format)
GPS from getting started to giving up (XVIII), multipath effect
guava: Multiset的使用