题意:给你n个点,m条边,要你求把n个点连通的最小值,第二小的值,最小可能和第二小相等
题解:次小生成树的模板套一下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
const int mx = 1e3+5;
int dis[mx];
int vis[mx];
int g[mx][mx];
int Max[mx][mx];
int pre[mx];
int n,m;
int prim(){
memset(dis,inf,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[1] = 0;
int ans = 0;
for(int i = 1; i <= n; i++){
int minn = inf,x;
for(int j = 1; j <= n; j++)
if(!vis[j]&&minn>dis[j])
minn = dis[x = j];
vis[x] = 1;
ans += dis[x];
for(int j = 1; j <= n; j++)
if(vis[j]) Max[x][j] = Max[j][x] = x==j?0:max(Max[pre[x]][j],dis[x]);
else if(dis[j]>g[x][j])