摘要: 题意: 给出一个有n 个节点的和m 条单向边,问图中是否任意两点都是连通的,这里连通的定义为:u,v连通,则存在一条从u到v的边或存在一条从v到u的边。分析:因为在一个强连通分量内部的点是两两可达的,所以可以先对所有的强连通分量缩点,即把强连通分量内部的点看成是一个点。如果两点不可达那么在拓 扑排序时,该两点谁也不是谁的前驱和后继,所以在拓扑排序时只要同时出现至少两个入度为0的点,那么这些点一定互不可达,所以只要判断拓扑的方式 是否唯一即可。#include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeo 阅读全文
posted @ 2012-10-03 17:39 'wind 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 题意: 知道了一颗有 n 个节点的树和树上每条边的权值,对应两种操作: 0 x 输出当前节点到 x节点的最短距离,并移动到 x 节点位置 1 x val 把第 x 条边的权值改为 val分析: 树上两个节点a,b的距离可以转化为 dis[a] + dis[b] - 2*dis[lca(a,b)] 其中 dis[i] 表示 i 节点到根的距离, 由于每次修改一条边,树中在这条边下方的 dis[] 值全都会受到影响,这样每条边都对应这一段这条边的管辖区, 可以深搜保存遍历该点的时间戳,ll[i] 表示第一次遍历到该点的时间戳, rr[i] 表示回溯到该点时的时间戳,这样每次 修改边 i 的时候就可 阅读全文
posted @ 2012-10-03 10:22 'wind 阅读(1666) 评论(0) 推荐(0) 编辑