HDU3087 LCA+前向型
来源:互联网 发布:淘宝美工是什么意思 编辑:程序博客网 时间:2024/06/07 20:06
我是用LCA做的!!先用前向星初始化处理边
struct Node
{
int prein,floor;
}T[400000];
int add(int a,int b)//以a到b的边
{
A[tt].to=b;
A[tt].next=head[a];
head[a]=tt++;
return 0;
}//前向星
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
int to,next;
}A[400000];//双向边尽量开大点
struct Node
{
int prein,floor;
}T[400000];
int head[400000],tt=1,n,dis[400000],mark[400000],leap[400000];
int add(int a,int b)
{
A[tt].to=b;
A[tt].next=head[a];
head[a]=tt++;
return 0;
}
int LCA(int s)
{
int t;
for(int k=head[s];k;k=A[k].next)
{
t=A[k].to;
if(mark[t]!=0) continue;
mark[t]=1;
T[t].prein=s;
T[t].floor=T[s].floor+1;
LCA(t);
}
return 0;
}
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int i,j,a,b,Q;
scanf("%d%d",&n,&Q);
for(i=1;i<=n;i++)
scanf("%d",&dis[i]);
memset(mark,0,sizeof(mark));
memset(head,0,sizeof(head));
for(i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
T[1].prein=1;
T[1].floor=1;
LCA(1);
int k,x;
for(i=1;i<=Q;i++)
{
scanf("%d%d%d",&k,&a,&b);
if(k==0) dis[a]=b;
else
{
j=1;
x=0;
leap[j++]=dis[a];
leap[j++]=dis[b];
x+=2;
while(T[a].floor>T[b].floor)
{
a=T[a].prein;
if(a!=b){x+=1;leap[j++]=dis[a];}
}
while(T[b].floor>T[a].floor)
{
b=T[b].prein;
if(a!=b){x+=1;leap[j++]=dis[b];}
}
while(a!=b)
{
a=T[a].prein;
b=T[b].prein;
if(a!=b)
{
leap[j++]=dis[a];
leap[j++]=dis[b];
x+=2;
}
else {leap[j++]=dis[a];x+=1;}
}
if(x<k) printf("invalid request!\n");
else
{
sort(leap+1,leap+j,cmp);
printf("%d\n",leap[k]);
}
}
}
return 0;
}
- HDU3087 LCA+前向型
- hdu 2874 Connections between citie(离线tarjan求LCA 前向星)
- HDU 2874 Connections between cities LCA Tarjan 链式前向星
- LCA向RMQ转化
- 前向星,链式前向星
- 类前向声明
- c++ 前向声明
- 前向声明
- 前向反馈网络
- 前向声明
- C++前向声明
- VC 前向声明
- 前向声明
- 前向引用声明
- 前向算法
- 前向算法实现
- 链式前向星
- feedforwardnet,前向神经网络
- Android平台下驱动的开发及测试框架概述(一)
- Linux内核学习四库全书
- c#发送数据到剪贴板及从剪贴板获取数据
- FOUR组第三周总结
- 重构之1.Duplicate Observed Data 复制被监视数据
- HDU3087 LCA+前向型
- 重视线程安全问题
- Linux网络编程必看书籍推荐
- 上海传智播客JAVASE_day07学习笔记
- 将项目部署到tomcat的三种方法
- 注解的定义与反射调用
- HDU 3666 差分约束+判断有没有负环
- 黑马程序员——7K月薪面试题破解学习记录
- uva 1500 - Alice and Bob(推理)