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

建立网站链接结构的基本方式有最威海的网站建设

建立网站链接结构的基本方式有,最威海的网站建设,军事内参消息,网站排名突然掉了怎么回事前言: 题目链接:P3128 [USACO15DEC] Max Flow P - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 讲解: 这一题含金量真算高的,包含了建树(用了图论的知识),求最近公共祖先(倍增法…

前言:

题目链接:P3128 [USACO15DEC] Max Flow P - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

讲解:

这一题含金量真算高的,包含了建树(用了图论的知识),求最近公共祖先(倍增法),还有树上差分(第一次听树上还有差分吧)

这些知识有欠缺的去学习一下上面的几个小知识点吧

 思路:

该题我一开始的思路是:虽然一个父亲有多个孩子,但是孩子只有一个父亲,就准备用一个fa数组或者一个map(孩子是键值)来存父子关系,然后有一个book数组,当输入s和t时,就从t加到s,用book标记每个点的经过次数,后面发现这个做法不可行----->原因1:给出的x和y并不确定哪个是父亲        原因2:s和t也不确定哪个是父亲------->思路转变

该题实际要(第四声)求的是:被经过最多次数的点;这个题涉及到的是图或者树,并且更改的是一段中的数据------->频繁更改某个区间------->想到差分----->树差分

(当涉及更改某个区间时,我想到了线段树,但是线段树一般方便查询的是 某个区间   的相关属性(如区间和),但是该题最后并未涉及和区间有关的求值,而是求单点的信息,因此线段树这种做法可以放后面考虑, 但是线段树是可以做的,也有相关的题解,感兴趣的和想复习线段树的大佬可以去做做)

AC代码:

const int N = 5e4 + 5;
const int M = N - 1;int cnt;
int head[N];
int fa[N][21];
int deepth[N];
int power[N];
int ans;struct EDGE
{int v;int next;
}EDGE[M * 2];void add(int u, int v)
{cnt++;EDGE[cnt].v = v;EDGE[cnt].next = head[u];head[u] = cnt;
}void dfs(int son, int father)
{//第2^0个父亲就是这个父亲fa[son][0] = father;//儿子深度 = 父亲深度 + 1deepth[son] = deepth[father] + 1;//算低2 ^ i个父亲是谁for (int i = 1; (1 << i)/*注意不是i << 1*/ <= deepth[son]; i++)fa[son][i] = fa[fa[son][i - 1]][i -1];//公式for (int i = head[son]; i; i = EDGE[i].next){int v = EDGE[i].v;if (v != father)/**/dfs(v, son);}
}int lca(int x, int y)
{if (deepth[x] < deepth[y])//要让x在y下面,这样子方便后面统一处理swap(x, y);//使得x,y位于同一高度for (int i = 20; i >= 0; i--)//注意是逆序(原因:1、从上往下找比较快 2、若为顺序,则越往上走,找的父亲跨度越大,不符合要求){if (deepth[fa[x][i]] >= deepth[y])x = fa[x][i];}if (x == y)//如果两个点已经重合return x;//找公共祖先且使得x,y位于公共祖先的下一层for (int i = 20; i >= 0; i--){if (fa[x][i] != fa[y][i]){x = fa[x][i];y = fa[y][i];}}return fa[x][0];//因为位于公共祖先的下一层,所以他们的父亲就是公共祖先
}void getans(int son, int father)
{for (int i = head[son]; i; i = EDGE[i].next){if (EDGE[i].v == father)/**/continue;getans(EDGE[i].v, son);power[son] += power[EDGE[i].v];}ans = max(ans, power[son]);
}void solve()
{int n, k;cin >> n >> k;int u, v, w;//建树for (int i = 0; i < n - 1; i++){cin >> u >> v;add(u, v);add(v, u);}dfs(1, 0);//求第2 ^ n个父亲//求公共祖先、树上差分for (int i = 0; i < k; i++){cin >> u >> v;int togetherfather = lca(u, v);power[u]++;power[v]++;power[togetherfather]--;power[fa[togetherfather][0]]--;}getans(1, 0);cout << ans << endl;
}int main()
{solve();return 0;
}

http://www.yayakq.cn/news/948781/

相关文章:

  • 南宁在百度上建网站如何建设网站导航内链接
  • 英文网站模板制作无极领域网站
  • 保安公司系统优化的知识
  • 做网站谁家做的好做好网络推广的技巧
  • 医疗网站设计方案泰州哪里有做网站的网络公司4000-26
  • 龙岗住房建设局网站办公系统软件oa
  • c2c电子商务网站有哪些网站设置手机才能播放
  • 怎么知道网站程序是什么做的wordpress怎么绑定域名
  • 做网站公司 晨旭东方怎样创建设计公司网站
  • 怎么做点击图片进网站苏州网站定制公司哪家好
  • 公众平台网站建设哪家专业网站建设与网页设计是什么
  • 路由器通过域名解析做网站西安阎良区建设局网站
  • 做网站做那一网站好中国品牌500强排名
  • 厦门市建设局网站住房保障2018如何有效的推广宣传
  • 黄骅市网站建设公司net开发网页小程序
  • 百度给做的网站如何登陆网站后台免费网站怎么建立
  • 做网站的公司哪好物流网站建设网
  • 网站这么推广创意网名昵称大全
  • 国内最好的摄影网站网站基础维护
  • 为什要做网站域名备案查询管理系统
  • 广州网站制作公司多少钱付费资料网站开发
  • 网站+建设设计网站建设的方法有哪些方面
  • 电子商务网站建设与维护读书报告电商型网站建设
  • 中小学网站建设排行2017不允许做企业网站
  • 网站建设常用编程语言餐饮 公司 网站建设
  • 联邦快递网站建设的目标百度推广天津总代理
  • 没有广告的免费个人网站建设手机购物网站模板下载
  • 一个论坛网站应该怎么做wordpress展示备案号
  • 网站入口你会回来感谢我的好的模板网站建设
  • 河南做网站找谁中国核工业二三建设有限公司