当前位置:网站首页>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
边栏推荐
- 14年本科毕业,转行软件测试,薪资13.5K
- Redistemplate common collection instructions opsforset (V)
- Why rdd/dataset is needed in spark
- Efficiency tool +wps check box shows the solution to the sun problem
- What can one line of code do?
- 快讯:飞书玩家大会线上举行;微信支付推出“教培服务工具箱”
- 中国白酒的5场大战
- 50个常用的Numpy函数解释,参数和使用示例
- uni-app App端半屏连续扫码
- Comparison between multithreaded CAS and synchronized
猜你喜欢
bat脚本学习(一)
Vit paper details
抖音將推獨立種草App“可頌”,字節忘不掉小紅書?
对话阿里巴巴副总裁贾扬清:追求大模型,并不是一件坏事
PostgreSQL 修改数据库用户的密码
Yuan Xiaolin: safety is not only a standard, but also Volvo's unchanging belief and pursuit
麦趣尔砸了小众奶招牌
[Li Kou brushing questions] one dimensional dynamic planning record (53 change exchanges, 300 longest increasing subsequence, 53 largest subarray and)
Reset Mikrotik Routeros using netinstall
C how to set two columns comboboxcolumn in DataGridView to bind a secondary linkage effect of cascading events
随机推荐
[daily] win10 system setting computer never sleeps
1D convolution detail
PostgreSQL 安装gis插件 CREATE EXTENSION postgis_topology
JS学习笔记-OO创建怀疑的对象
Aggregate function with key in spark
First batch selected! Tencent security tianyufeng control has obtained the business security capability certification of the ICT Institute
Leveldb source code analysis series - main process
Reset Mikrotik Routeros using netinstall
Sparkshuffle process and Mr shuffle process
美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断
Technology sharing | packet capturing analysis TCP protocol
What can one line of code do?
Fastjson parses JSON strings (deserialized to list, map)
Sql: stored procedures and triggers - Notes
爬虫实战(五):爬豆瓣top250
NPM run dev start project error document is not defined
基于LM317的可调直流电源
[Li Kou brush questions] 32 Longest valid bracket
Proxy and reverse proxy
[go][转载]vscode配置完go跑个helloworld例子