这题如果想到是并查集就很简单了,按t来排序一下就好了
AcCode:
#include<bits/stdc++.h>
using namespace std;
struct way{int v1, v2, t;
};
bool Cmp(const way &a, const way &b){return a.t < b.t;
}vector<way> w;
int unionList[1010];int find(int v){if(unionList[v] == 0) return v;return unionList[v] = find(unionList[v]); //路径压缩
}bool merge(int a, int b){int rt1 = find(a), rt2 = find(b);if(rt1 != rt2){unionList[rt2] = rt1; //b的祖先结点连接到a的祖先结点上return true;}return false;
}int main(){int N, M, res = -1;bool flag = false;cin >> N >> M;for(int i = 1; i <= M; i++){int x, y, z;cin >> x >> y >> z;w.push_back({x, y, z});}sort(w.begin(), w.end(), Cmp);for(int i = 0; i < w.size(); i++){if(merge(w[i].v1, w[i].v2)){N--;}if(!flag && N == 1) res = w[i].t, flag = true;}cout << res;return 0;
}