当前位置:网站首页>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
边栏推荐
- 【sciter】: 基于 sciter 封装通知栏组件
- Shell product written examination related
- Sparkshuffle process and Mr shuffle process
- Mysql相关术语
- The relationship between root and coefficient of quadratic equation with one variable
- LeetCode学习记录(从新手村出发之杀不出新手村)----1
- 1D convolution detail
- Write a rotation verification code annotation gadget with aardio
- 在Pi和Jetson nano上运行深度网络,程序被Killed
- mysql根据两个字段去重
猜你喜欢
Z function (extended KMP)
Michael smashed the minority milk sign
GPS du début à l'abandon (XIII), surveillance autonome de l'intégrité du récepteur (raim)
美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断
Vit paper details
[daily] win10 system setting computer never sleeps
Broadcast variables and accumulators in spark
JPEG2000 matlab source code implementation
PostgreSQL 修改数据库用户的密码
GPS从入门到放弃(十三)、接收机自主完好性监测(RAIM)
随机推荐
guava:Collections.unmodifiableXXX创建的collection并不immutable
20 large visual screens that are highly praised by the boss, with source code templates!
关于char[]数组通过scanf赋值使用上的一些问题。。
Search map website [quadratic] [for search map, search fan, search book]
【sciter Bug篇】多行隐藏
麦趣尔砸了小众奶招牌
JS method to stop foreach
Digital transformation takes the lead to resume production and work, and online and offline full integration rebuilds business logic
ROS error: could not find a package configuration file provided by "move_base“
抖音將推獨立種草App“可頌”,字節忘不掉小紅書?
npm run dev启动项目报错 document is not defined
Tips for web development: skillfully use ThreadLocal to avoid layer by layer value transmission
Why is the cluster mode of spark on Yan better than the client mode
GPS from getting started to giving up (XVIII), multipath effect
GPS from entry to abandonment (XIV), ionospheric delay
【sciter】: 基于 sciter 封装通知栏组件
[Yu Yue education] reference materials for surgical skills teaching in Tongji University
50个常用的Numpy函数解释,参数和使用示例
Record the process of cleaning up mining viruses
C# 如何在dataGridView里设置两个列comboboxcolumn绑定级联事件的一个二级联动效果