Floyd 判断连通性 d[i][j]仅表示i,j之间是否联通 ;k<=n;k++) ;i<=n;i++) ;j<=n;j++) dis[i][j]=dis[i][j]||(dis[i][k]&&dis[k][j]); 有向图和无向图都适用 当然了,也可以DFS判断连通性 裸题: P2419 [USACO08JAN]牛大赛Cow Contest 题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently num…
通过别人的数据搞了好久才成功,果然还是不够成熟 做题目还是算法不能融会贯通 大意即找出图中至少3个顶点的环,且将环中点按顺序输出 用floyd算法求最小环 因为floyd算法求最短路径是通过中间量k的增加而更新的 算法流程: 对于k,我们知道利用floyd算法求出任意两点i,j最短距离,仅通过路径i-()-j,其中()中的节点编号均<=k-1 可以这样证明: 设最小环上最大点的编号为k0;则当k=k0时,对于任意与k0相接两点i,j两者 1.对于环的剩下一部分必然是i到j的最短路径,因为最佳 2…
import java.util.ArrayList; import java.util.List; // 模块E public class AdjMatrixGraph<E> { protected SeqList<E> vertexlist; // 顺序表存储图的顶点集合 protected int[][] adjmatrix; // 图的邻接矩阵 二维图 存储的是每个顶点的名称(A,B,C,D....) ; // private final int MAX_WEIGHT = …
[Vijos1022]]Victoria的舞会2 Description Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京天安门>闻名于世界.现在,他为了报答帮助他的同行们,准备开一个舞会.  Victoria准备邀请n个已经确定的人,可是问题来了:  这n个人每一个人都有一个小花名册,名册里面写着他所愿意交流的人的名字.比如说在A的人名单里写了B,那么表示A愿意与B交流:但是B的名单里不见的有A,也就是说B不见的想与A交流.但是如果A愿意与B交流,B愿意与C交流,那么A一定愿意…
题目链接: http://poj.org/problem?id=2513 http://bailian.openjudge.cn/practice/2513?lang=en_US Time Limit: 5000MS Memory Limit: 128000K Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possi…
题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径上的点进行标记,于是根据题意我们可以发现,如果这个图是“caterpillar”的话,那么他所有的边要么两端都在树上最长直径上,要么就是其中一端在,于是我们可以再次dfs进行判断就可以了. #include<iostream> #include<cstdio> #include<…
//用map映射TLE,字典树就AC了#include"cstdio" #include"set" using namespace std; ; ;//26个小写英文字母 struct node{ int val;//存放字符串的hash值 node* next[N]; }; node memory[MAXN]; int ant; node* root; node* create_tree() { node* p=&memory[ant++]; ;i<…
图的连通性问题包括: 1.强连通分量. 2.最小点基和最小权点基. 3.双连通. 4.全局最小割. 5.2-SAT 一.强连通分量 强连通分量很少单独出题,一般都是把求强连通分量作为缩点工具. 有三种算法: 1.Kosaraju算法.对原图和反图分别进行一次深度优先搜索. 2.Tarjan算法.用了时间戳. 3.Garbow算法.与Tarjan算法是同一思想,但更精妙. 三种算法的模版我已经贴过了  http://www.cnblogs.com/Potato-lover/p/3956604.ht…
题目链接 传送门:https://ac.nowcoder.com/acm/contest/76/F 思路: 题目的意思就是判断图的连通性可以用可达性矩阵来求,至于图的存储可以用邻接矩阵来储存,求出来可达性矩阵后判断下 a[1] [n] 是不是为零就好了,不为零的话说明从1(自己)到 n(teacher)是连通的,为零的话就说明不是连通的 代码: #include <bits/stdc++.h> using namespace std; ; int n, m, a[MAXN][MAXN]; in…
floyd求最小环 在Floyd的同时,顺便算出最小环. Floyd算法 :k<=n:k++) { :i<k:i++) :j<k:j++) if(d[i][j]+m[i][k]+m[k][j]<min) min=d[i][j]+m[i][k]+m[k][j]: :i<=n:i++) :j<=n:j++) if(d[i][k]+d[k][j]<d[i][j]) d[i][j]=d[i][k]+d[k][j]: } 保证了最外层循环到 k 时所有顶点间已求得以 0..…