当前位置:网站首页>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从入门到放弃(十五)、DCB差分码偏差
- Basic introduction of figure
- [asp.net core] set the format of Web API response data -- formatfilter feature
- 【MySQL】Online DDL详解
- Realization of epoll reactor model
- Intelligent online customer service system source code Gofly development log - 2 Develop command line applications
- [Chongqing Guangdong education] Information Literacy of Sichuan Normal University: a new engine for efficiency improvement and lifelong learning reference materials
- High precision face recognition based on insightface, which can directly benchmark hongruan
- Why is the cluster mode of spark on Yan better than the client mode
- Five wars of Chinese Baijiu
猜你喜欢

guava:Collections.unmodifiableXXX创建的collection并不immutable

Digital transformation takes the lead to resume production and work, and online and offline full integration rebuilds business logic

中国白酒的5场大战

numpy 下载安装

GPS from getting started to giving up (XIII), receiver autonomous integrity monitoring (RAIM)

Make menuconfig has a recipe for target 'menuconfig' failed error

bat脚本学习(一)

JS method to stop foreach

Unity3D学习笔记6——GPU实例化(1)

抖音将推独立种草App“可颂”,字节忘不掉小红书?
随机推荐
GPS from entry to abandonment (XIV), ionospheric delay
功能强大的国产Api管理工具
MariaDb数据库管理系统的学习(一)安装示意图
Enhance network security of kubernetes with cilium
中国白酒的5场大战
guava:Collections. The collection created by unmodifiablexxx is not immutable
Write a rotation verification code annotation gadget with aardio
PostgreSQL modifies the password of the database user
Why is the cluster mode of spark on Yan better than the client mode
Oracle性能分析3:TKPROF简介
The underlying implementation of string
用aardio写一个旋转验证码标注小工具
Sdl2 source analysis 7: performance (sdl_renderpresent())
make menuconfig出现recipe for target ‘menuconfig‘ failed错误
npm run dev启动项目报错 document is not defined
Michael smashed the minority milk sign
Redistemplate common collection instructions opsforlist (III)
Guava: use of multiset
Uni app app half screen continuous code scanning
MySQL removes duplicates according to two fields