当前位置:网站首页>hdu 4912 Paths on the tree(lca+馋)
hdu 4912 Paths on the tree(lca+馋)
2022-07-06 13:44:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
意甲冠军:它使树m路径,当被问及选择尽可能多的路径,而这些路径不相交。
思考:贪心,比較忧伤。首先求一下每对路径的lca。依照lca的层数排序。在深一层的优先级高。那么就能够贪心了,每次选择层数最深的那一个,假设两个端点没有被标记,那么就选择这条路径,把lca的子树都标记掉。
代码:
#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;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117044.html原文链接:https://javaforall.cn
边栏推荐
- jvm:大对象在老年代的分配
- Michael smashed the minority milk sign
- ROS error: could not find a package configuration file provided by "move_base“
- Why is the cluster mode of spark on Yan better than the client mode
- b站视频链接快速获取
- JS学习笔记-OO创建怀疑的对象
- Description of web function test
- Broadcast variables and accumulators in spark
- The underlying implementation of string
- 爬虫实战(五):爬豆瓣top250
猜你喜欢
jvm:大对象在老年代的分配
中国白酒的5场大战
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
C# 如何在dataGridView里设置两个列comboboxcolumn绑定级联事件的一个二级联动效果
袁小林:安全不只是标准,更是沃尔沃不变的信仰和追求
抖音将推独立种草App“可颂”,字节忘不掉小红书?
PostgreSQL modifies the password of the database user
JPEG2000-Matlab源码实现
搜素专题(DFS )
随机推荐
Efficiency tool +wps check box shows the solution to the sun problem
[Li Kou brushing questions] one dimensional dynamic planning record (53 change exchanges, 300 longest increasing subsequence, 53 largest subarray and)
The relationship between root and coefficient of quadratic equation with one variable
NPM run dev start project error document is not defined
Reinforcement learning - learning notes 5 | alphago
ROS error: could not find a package configuration file provided by "move_base“
Fastjson parses JSON strings (deserialized to list, map)
c语言char, wchar_t, char16_t, char32_t和字符集的关系
华为在多个行业同时出击,吓人的技术让欧美企业瑟瑟发抖
It's not my boast. You haven't used this fairy idea plug-in!
美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断
LeetCode:1189. The maximum number of "balloons" -- simple
记一次清理挖矿病毒的过程
Description of web function test
[daily] win10 system setting computer never sleeps
PostgreSQL 修改数据库用户的密码
Method return value considerations
Reset Mikrotik Routeros using netinstall
关于char[]数组通过scanf赋值使用上的一些问题。。
Tips for web development: skillfully use ThreadLocal to avoid layer by layer value transmission