搜索与图论
搜索与图论
墨染&殇泪
这个作者很懒,什么都没留下…
展开
-
acwing算法基础课:二分图算法(匈牙利算法)
匈牙利算法模板时间复杂度是 O(nm), n 表示点数,m表示边数int n1, n2; // n1表示第一个集合中的点数,n2表示第二个集合中的点数int h[N], e[M], ne[M], idx; // 邻接表存储所有边,匈牙利算法中只会用到从第一个集合指向第二个集合的边,所以这里只用存一个方向的边int match[N]; // 存储第二个集合中的每个点当前匹配的第一个集合中的点是哪个bool st[N]; // 表示第二个集合中的每个点是否已经被遍原创 2021-10-29 20:24:37 · 163 阅读 · 0 评论 -
acwing算法基础课:最短路算法(Bellman-Ford算法)
Bellman-Ford算法时间复杂度 O(nm), n 表示点数,m表示边数注意在模板题中需要对下面的模板稍作修改,加上备份数组,详情见模板题。int n, m; // n表示点数,m表示边数int dist[N]; // dist[x]存储1到x的最短路距离struct Edge // 边,a表示出点,b表示入点,w表示边的权重{ int a, b, w;}edges[M];// 求1到n的最短路距离,如果无法从1走到n,则返回-1。原创 2021-10-22 21:57:37 · 178 阅读 · 0 评论 -
acwing算法基础课:最短路算法(堆优化dijkstra算法)
堆优化dijkstra算法模版时间复杂度 O(mlogn), n 表示点数,m表示边数typedef pair<int, int> PII;int n; // 点的数量int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边int dist[N]; // 存储所有点到1号点的距离bool st[N]; // 存储每个点的最短距离是否已确定// 求1号点到n号点的最短距离,如果不存在,则返回-1i原创 2021-10-21 20:57:34 · 221 阅读 · 0 评论 -
acwing算法基础课:最短路算法(floyd算法)
floyd算法模版时间复杂度是 O(n3), n表示点数初始化: for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (i == j) d[i][j] = 0; else d[i][j] = INF;// 算法结束后,d[a][b]表示a到b的最短距离void floyd(){ for (int k = 1; k <=原创 2021-10-25 20:43:14 · 281 阅读 · 0 评论 -
acwing算法基础课:最短路算法(spfa判断负环算法)
spfa判断负环算法模版spfa判断图中是否存在负环 —— 模板题 AcWing 852. spfa判断负环时间复杂度是 O(nm), n 表示点数,m表示边数int n; // 总点数int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边int dist[N], cnt[N]; // dist[x]存储1号点到x的最短距离,cnt[x]存储1到x的最短路中经过的点数bool st[N]; // 存储每个点是否原创 2021-10-25 19:58:24 · 210 阅读 · 0 评论 -
acwing算法基础课:最短路算法(spfa算法)
spfa算法模版时间复杂度 平均情况下 O(m),最坏情况下 O(nm), n 表示点数,m表示边数int n; // 总点数int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边int dist[N]; // 存储每个点到1号点的最短距离bool st[N]; // 存储每个点是否在队列中// 求1号点到n号点的最短路距离,如果从1号点无法走到n号点则返回-1int spfa(){ memset(原创 2021-10-24 20:10:52 · 223 阅读 · 0 评论 -
acwing算法基础课:最短路算法分类
最短路算法图原创 2021-10-18 19:36:12 · 55 阅读 · 0 评论 -
acwing算法基础课:二分图算法(染色法判别二分图算法)
染色法判别二分图模板时间复杂度是 O(n+m), n 表示点数,m表示边数int n; // n表示点数int h[N], e[M], ne[M], idx; // 邻接表存储图int color[N]; // 表示每个点的颜色,-1表示未染色,0表示白色,1表示黑色// 参数:u表示当前节点,c表示当前点的颜色bool dfs(int u, int c){ color[u] = c; for (int i = h[u]; i != -1; i原创 2021-10-28 19:35:42 · 181 阅读 · 0 评论