只有10分,不知道哪里错了
查看原帖
只有10分,不知道哪里错了
1140371
ruanertanjing楼主2024/5/5 20:11
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <functional>
#include <climits>

#define quickio ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl "\n"

using namespace std;
typedef long long ll;

const int N = 2e4 + 5;
const int M = 1e5 + 5;

int n, m;
int fa[N * 2];
int ans;

struct zf
{
	int a;
	int b;
	int c;

	bool operator<(struct zf t)
	{
		return c < t.c;
	}
}zf[M];

int find(int son)
{
	if (fa[son] == son)
		return son;
	return fa[son] = find(fa[son]);
}

int FindMin()
{
	for (int i = 0; i < m; i++)
	{
		if (find(zf[i].a) == find(zf[i].b))//如果两个在同一集合------->已经分好两组了------->则他们之间的边权就是答案
		{
			return zf[i].c;
		}
		else//如果两个不在同一集合,则分别列入对方的敌人集合
		{
			fa[find(zf[i].a)] = find(zf[i].b + n);
			fa[find(zf[i].b)] = find(zf[i].a + n);
		}
	}
	return 0;
}

int main()
{
	cin >> n >> m;
	for (int i = 0; i < m; i++)
	{
		cin >> zf[i].a >> zf[i].b >> zf[i].c;
	}
	sort(zf, zf + m);//排序所有边
	for (int i = 1; i <= 2 * n; i++)
	{
		fa[i] = i;//i >= n的存的是敌人
	}

	ans = FindMin();
	cout << ans << endl;
	return 0;
}

只有10分,不知道哪里错了

2024/5/5 20:11
加载中...