当前位置:网站首页>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
边栏推荐
- [Yu Yue education] higher mathematics of Nanchang University (2) reference materials
- Kohana 数据库
- guava: Multiset的使用
- guava:Collections. The collection created by unmodifiablexxx is not immutable
- Bat script learning (I)
- 1D convolution detail
- GPS from getting started to giving up (XVIII), multipath effect
- MariaDb数据库管理系统的学习(一)安装示意图
- 【MySQL】Online DDL详解
- Vit paper details
猜你喜欢

Basic introduction of figure

搜素专题(DFS )

美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断

Shake Sound poussera l'application indépendante de plantation d'herbe "louable", les octets ne peuvent pas oublier le petit livre rouge?

ViT论文详解

1292_ Implementation analysis of vtask resume() and xtask resume fromisr() in freeros
![[Chongqing Guangdong education] Tianjin urban construction university concrete structure design principle a reference](/img/61/976c7d86ab3b2df5f5af3beefbf547.png)
[Chongqing Guangdong education] Tianjin urban construction university concrete structure design principle a reference

GPS從入門到放弃(十三)、接收機自主完好性監測(RAIM)

Enhance network security of kubernetes with cilium

bat脚本学习(一)
随机推荐
GPS从入门到放弃(十二)、 多普勒定速
Kohana database
C language: comprehensive application of if, def and ifndef
Redistemplate common collection instructions opsforset (V)
npm run dev启动项目报错 document is not defined
Hill | insert sort
What can one line of code do?
GPS from getting started to giving up (XX), antenna offset
C language char, wchar_ t, char16_ t, char32_ Relationship between T and character set
SQL:存储过程和触发器~笔记
ViT论文详解
Five wars of Chinese Baijiu
guava:Collections.unmodifiableXXX创建的collection并不immutable
小满网络模型&http1-http2 &浏览器缓存
Happy sound 2[sing.2]
string的底层实现
Search map website [quadratic] [for search map, search fan, search book]
爬虫实战(五):爬豆瓣top250
GPS from getting started to giving up (19), precise ephemeris (SP3 format)
14 years Bachelor degree, transferred to software testing, salary 13.5k