无向图相关问题

问题描述
一个无向图,顶点为N个,顶点编号为1~N,其中M条边已给定,现在要从K条备选边中选出若干条,使得整个图连通,且选出的边权值和最小。
输入
第一行输入三个整数N(N<100), M, K,接下来一行为K个整数表示备选边的编号。然后是是M行,每行三个数字:u,v,d(0 输出
如果输入有解则输出选出的边的权值和否则输出-1

#include 
#include 
using namespace std;

const int maxn = 100 + 10;
int s[maxn];	// 并查集	s[i] == i则i为根结点 s[i]==j表示结点i的父节点为j 
struct E {	// 边 
	int v, w;	// 两个顶点 
	int p;		// 边的权重  
} es[maxn*(maxn-1)/2];
int ek[maxn*(maxn-1)/2];	// 备选边 
bool cmp(E a, E b) {
	return a.p < b.p;
}
int find(int x) {	// 查找x的根结点 
	while(s[x] != x) {	// 一直往上查找根节点 
		x = s[x];
	}
	return x;
}
int main() {
	int n, m, k;
	
	scanf("%d%d%d", &n, &m, &k);
	for(int i=0; i

你可能感兴趣的:(考研复试机试)