集合为啥不能过?
查看原帖
集合为啥不能过?
402384
orgn楼主2021/11/19 22:22
#include <bits/stdc++.h>
using namespace std;
int n, m;
set<int> s1, s2;
struct node {
	int a, b, c;
} f[100005];
bool cmp(node a, node b) {
	return a.c > b.c;
}
int main () {
//	freopen("P1525_2.in","r",stdin);
//	freopen(".out","w",stdout);
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
		cin >> f[i].a >> f[i].b >> f[i].c;
	sort(f + 1, f + 1 + n, cmp);
	for (int i = 1; i <= m; i++) {
    //判断是否属于一个集合,是——退出,不是或未进集合——插入不同集合
		if (s1.count(f[i].a)) {
			if (s1.count(f[i].b)) {
				cout << f[i].c << endl;
				return 0;
			} else if (!s2.count(f[i].b)) {
				s2.insert(f[i].b);
			}
		} else {
			if (s2.count(f[i].a)) { /*s2.a true*/
				if (s2.count(f[i].b)) {
					cout << f[i].c << endl;
					return 0;
				} else if (!s1.count(f[i].b)) {
					s1.insert(f[i].b);
				}
			} else { /*s1.a not,s2.a not*/
				if (s1.count(f[i].b)) {
					s2.insert(f[i].a);
				} else if (s2.count(f[i].b)) {
					s1.insert(f[i].a);
				} else {
					s1.insert(f[i].a);
					s2.insert(f[i].b);
				}
			}
		}
	}
	cout << 0 << endl;
	return 0;
}
2021/11/19 22:22
加载中...