五一培训 清北学堂 DAY5
今天是吴耀轩老师的讲解~
今天的主要内容:图论
如何学好图论?
学好图论的基础:必须意识到图论!
图
邻接矩阵存图:
其缺点是显而易见的:1. 空间复杂度O(n^2)不能接受;2.有重边的时候很麻烦;
优点很简单啦:好写qwq(是不是有点糊弄)
邻接表
一些vector的细节:
生成树
既然它是一颗树,那么应该满足无环!
比如这样它就是一颗有环树!
看个题:
实际上就是让你求最小瓶颈树!qwq
显然红色的更优!
这些是做这个题的做法:
并查集
Kruskal
判断是否构成环:并查集判断是否在一颗树上!
贴上Kruskal的代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 1000005; struct edge { int u, v, w; }edg[maxn]; int n, m, p[maxn], ans = 0; bool cmp(edge a, edge b) {return a.w < b.w;} int findp(int t) {return p[t] ? p[t] = findp(p[t]) : t;} bool merge(int u, int v) { u = findp(u); v = findp(v); if (u == v) return false; p[u] = v; return true; } int main() { cin >> n >> m; for (int i = 1, u, v, w; i <= m; i++) cin >> u >> v >> w, edg[i] = (edge){u, v, w}; sort(edg + 1, edg + m + 1, cmp); for (int i = 1; i <= m; i++) if (merge(edg[i].u, edg[i].v)) ans = max(ans, edg[i]. w); cout << ans << endl; }