摘要: 欧拉通路: find_circuit(结点i){ 当结点i有邻居时 选择任意一个邻居j; 删除边(i,j)或者做访问标记; find_circuit(结点j); 输出或存储节点i; } 本题注意点的编号可能是不连续的,处理n为最大的点的编号,以后循环1到n即可(尽管1到n不是每一个都有实际意义,但n 阅读全文
posted @ 2016-06-22 14:40 FuTaimeng 阅读(242) 评论(0) 推荐(0)
摘要: 寻找最小环 vis[i]表示i属于哪个图的连通分量,0表示没有访问过 lev[i]表示在当前连通分量中第几个访问到i的 如果vis[x]==0 继续dfs 否则 如果访问到了上一个联通分量的内容 return 否则 即访问到的本连通分量中已经访问的点,出现环,则用这个环的长度dep-lev[next 阅读全文
posted @ 2016-06-22 13:09 FuTaimeng 阅读(159) 评论(0) 推荐(0)
摘要: 一开始暴搜,超时3个点... 后来看了题解: 首先,两个点的距离为2当且仅当它们都与一个点直接相连 反过来说,一个点所有的出边的终点都是互相距离2的(最大值可以依靠这个方法,前向星处理的时候将每个点的最大出点和次大出点存起来,最后过一遍比较乘积) 那么,所有点对的权值和就是每一个点所产生的点对权值和 阅读全文
posted @ 2016-06-22 11:27 FuTaimeng 阅读(223) 评论(0) 推荐(0)
摘要: 点的序号很大,存不过来,但点数较少,因此用离散化,然后再用并查集。 用map进行离散化,过8个点,2个超时 代码: 阅读全文
posted @ 2016-06-22 10:05 FuTaimeng 阅读(206) 评论(0) 推荐(0)
摘要: pa[i]代表i的father pre[i]代表i之前有多少个 sum[i]代表i所在的整列有多少个 cc为命令类型,x y为命令参数, fx fy分别为x y的father 当cc==‘M’时,合并x y,因为是把x所在队列放到y所在队列后面,所以要pre[fx]=sum[fy](剩下的pre在f 阅读全文
posted @ 2016-06-22 09:59 FuTaimeng 阅读(254) 评论(0) 推荐(0)