当前位置: 首页 > news >正文

泰安选择企业建站公司/seo和sem的联系

泰安选择企业建站公司,seo和sem的联系,做新闻类网站还有市场吗,网站及其建设的心得给定一棵包含 n 个节点的有根无向树,节点编号互不相同,但不一定是 1∼n。 有 mm 个询问,每个询问给出了一对节点的编号 x 和 y,询问 x与 y 的祖孙关系。 输入格式 输入第一行包括一个整数 表示节点个数;接下来 n 行每…

给定一棵包含 n 个节点的有根无向树,节点编号互不相同,但不一定是 1∼n。

有 mm 个询问,每个询问给出了一对节点的编号 x 和 y,询问 x与 y 的祖孙关系。

输入格式
输入第一行包括一个整数 表示节点个数;接下来 n 行每行一对整数 a 和 b,表示 a 和 b 之间有一条无向边。如果 bb 是 −1,那么 a 就是树的根;第 n+2 行是一个整数 m 表示询问个数;接下来 m 行,每行两个不同的正整数 x 和 y,表示一个询问。输出格式
对于每一个询问,若 x 是 y 的祖先则输出 1,若 y 是 x 的祖先则输出 22,否则输出 0。数据范围
1≤n,m≤4×104
1≤每个节点的编号≤4×104
输入样例:
10
234 -1
12 234
13 234
14 234
15 234
16 234
17 234
18 234
19 234
233 19
5
234 233
233 12
233 13
233 15
233 19
输出样例:
1
0
0
0
2
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>using namespace std;const int N = 40010, M = N * 2;int n, m;
int h[N], e[M], ne[M], idx;
int depth[N];
int fa[N][25];//f[i][j]代表i这个点往上跳2的j次方步数的点void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}void bfs(int root)
{memset(depth, 0x3f, sizeof depth);depth[0] = 0;//设置哨兵depth[root]=1;queue<int>q;q.push(root);while(q.size()){int t=q.front();q.pop();for(int i=h[t];~i;i=ne[i]){int j=e[i];if(depth[t]+1<depth[j]){depth[j]=depth[t]+1;q.push(j);fa[j][0]=t;for(int k=1;k<20;k++){fa[j][k]=fa[fa[j][k-1]][k-1];}}}}
}int lca(int a, int b)
{if(depth[a]<depth[b])swap(a,b);for(int k=19;k>=0;k--){if(depth[fa[a][k]]>=depth[b])//跳出去fa[a][k]=0,depth[0]=0肯定小于depth[b],不执行a=fa[a][k];}if(a==b)return a;//同一个点直接返回for(int k=19;k>=0;k--){if(fa[a][k]!=fa[b][k]){//跳出去是等于不用管a=fa[a][k];b=fa[b][k];}}return fa[a][0];
}int main()
{scanf("%d", &n);int root = 0;memset(h, -1, sizeof h);for (int i = 0; i < n; i ++ ){int a, b;scanf("%d%d", &a, &b);if (b == -1) root = a;else add(a, b), add(b, a);}bfs(root);scanf("%d", &m);while (m -- ){int a, b;scanf("%d%d", &a, &b);int p = lca(a, b);if (p == a) puts("1");else if (p == b) puts("2");else puts("0");}return 0;
}
//Tarjan
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 40010, M = N * 2;struct ver{int y, id, v;
};
vector<ver> query[N];   // first存查询的另外一个点,second存查询编号int n, m;
int h[N], e[M], ne[M], idx;
int p[N];
int st[N];
int res[N];void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}int find(int x)
{if (p[x] != x) p[x] = find(p[x]);return p[x];
}void tarjan(int u)
{st[u] = 1;for (int i = h[u]; ~i; i = ne[i]){int j = e[i];if (!st[j]){tarjan(j);p[j] = u;}}for(auto item:query[u]){int y=item.y ;int id=item.id ;int t=item.v;if(st[y]==2){int fa=find(y) ;if(fa==u) res[id]= t;}}st[u] = 2;
}int main()
{scanf("%d", &n);int root = 0;memset(h, -1, sizeof h);for (int i = 0; i < n; i ++ ){int a, b;scanf("%d%d", &a, &b);if (b == -1) root = a;else add(a, b), add(b, a);}for (int i = 1; i <= N; i ++ ) p[i] = i;scanf("%d", &m);for (int i = 1; i <= m; i ++ ){int a, b;scanf("%d%d", &a, &b);query[a].push_back({b,i,1}) ;query[b].push_back({a,i,2}) ;}tarjan(root);//只能判断a是不是b的父亲for(int i=1;i<=m;i++) printf("%d\n",res[i]) ;return 0;
}
http://www.jmfq.cn/news/4990915.html

相关文章:

  • 深圳市手机网站建设报价/网络推广公司运作
  • win本地网站建设/网络推广员具体做什么的
  • 网站标题在线制作/美国最新消息今天 新闻
  • 58同城建网站怎么做/windows优化大师和360哪个好
  • 做展板好的网站/2024年新冠疫情最新消息今天
  • 要维护公司的网站该怎么做/今日小说排行榜
  • 乐清做网站的/品牌营销策略包括哪些内容
  • 做百度推广/seo团队
  • 淮安市广德育建设网站/怎么联系地推公司
  • 成熟的网站怎么做seo推广/品牌软文范文
  • 公司网站设计案例/今日新闻快讯
  • 青岛网站建设公司/百度官网下载安装免费
  • 十大招标网站排行榜/河北seo网络优化培训
  • .net网站开发优点/谷歌搜索引擎为什么国内用不了
  • 苏州知名网站建设公司/首页
  • php网站开发书/湖南关键词优化推荐
  • 网站单个页面做301/河南靠谱seo地址
  • 南京网站优化报价/免费推广的网站
  • web开发是做网站吗/安徽网络优化公司
  • 一个网站要怎么做的/申京效率值联盟第一
  • 给公司做门户网站多少钱/网络营销招聘岗位有哪些
  • 有关网站建设的网站/网络推广员为什么做不长
  • 成都企业网站建设公司/网络运营工作内容
  • 国内外网站建设/平台推广销售话术
  • 北京新闻最新消息报道/seo方案书案例
  • 一个网站的二维码怎么做/鹤壁网站推广公司
  • 小网站如何做/网站开发的步骤
  • 温州网站建设icp备/西安网站建设优化
  • 金属建材企业网站建设方案/中国国家培训网官网查询
  • 虎门镇最新疫情最新消息/手机流畅优化软件