#include<bits/stdc++.h>usingnamespace std;#define size 100001struct edge
{int to, nt, v;} e[2*size];int n, m, lst[size], cnt =0;inlinevoidadd(int u,int v,int w ){
cnt++;
e[cnt].to = v;
e[cnt].nt = lst[u];
e[cnt].v = w;
lst[u]= cnt;}
遍历
dfs
bool vis[size];inlinevoiddfs(int x ){for(int i = lst[x]; i; i = e[i].nt ){int t = e[i].to;if(!vis[t]){
vis[t]=true;dfs( t );}}}
bfs
queue <int> q;bool vis[size];inlinevoidbfs(int r ){for( q.push( r ), vis[r]=true;!q.empty();){int x = q.front();
q.pop();for(int i = lst[x]; i; i = e[i].nt ){int t = e[i].to;if(!vis[t]){
vis[t]=true;
q.push( t );}}}}
最短路
SPFA
queue <int> q;int dis[size];bool vis[size];inlinevoidSPFA(int s ){memset( dis,0x3f,sizeof( dis ));for( q.push( s ), vis[s]=true, dis[s]=0;!q.empty();){int x = q.front();
q.pop();
vis[x]=false;for(int i = lst[x]; i; i = e[i].nt ){int t = e[i].to, v = e[i].v;if( dis[x]+v < dis[t]){
dis[t]= dis[x]+v;if(!vis[t]){
vis[t]=false;
q.push( t );}}}}}
最小生成树
Kruskal(边表)
#include<bits/stdc++.h>usingnamespace std;#define size 100001struct edge
{int u, v, w;} e[2*size];int n, m, cnt =0;inlinevoidadd(int u,int v,int w ){
cnt++;
e[cnt].u = u;
e[cnt].v = v;
e[cnt].w = w;}int f[size], s[size], siz;inlineboolcmp( edge x, edge y ){return x.w < y.w;}inlineintfind(int x ){return f[x]== x? x: f[x]=find( f[x]);}inlinevoidKruskal(int r ){bool connected =false;sort( e+1, e+m+1, cmp );for(int i =1; i <= n; i++){
f[i]= i;
s[i]=1;}for(int i = r; i <= m; i++){int u =find( e[i].u ), v =find( e[i].v );if( u != v ){
siz += e[i].w;
f[u]= v;
s[v]+= s[u];
s[u]=0;if( s[v]== n ){
connected =true;break;}}}}intmain(){scanf("%d %d",&n,&m );for(int i =1; i <= m; i++){int u, v, w;scanf("%d %d %d",&u,&v,&w );add( u, v, w );}Kruskal(1);printf("%d", siz );return0;}