|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我的代码:
#include <bits/stdc++.h>
using namespace std;
struct node {
int x, y, z;
};
int t, n, e, c, d, f[1000010], b[3000030], tot, fl, ass, k1, k2;
node a[1000010];
int find(int x) {
if (f[x] == x) return x;
return f[x] = find(f[x]);
}
inline void init(int g){
for(int i = 1; i <= g; i++) f[i] = i;
}
bool cmp(node a, node b) {
return a.z > b.z;
}
int main() {
cin >> t;
while (t--) {
cin >> n;
memset(b, 0, sizeof(b));
memset(f, 0, sizeof(f));
memset(a, 0, sizeof(a));
tot = -1;
fl = 1;
for (int i = 1; i <= n; i++) {
cin >> a[i].x >> a[i].y >> a[i].z;
b[++tot] = a[i].x;
b[++tot] = a[i].y;
}
sort(b, b + tot);
ass = unique(b, b + tot) - b;
for (int i = 1; i <= n; i++) {
a[i].x = lower_bound(b, b + ass, a[i].x) - b;
a[i].y = lower_bound(b, b + ass, a[i].y) - b;
}
init(ass);
sort(a + 1, a + n + 1, cmp);
for (int i = 1; i <= n; i++) {
k1 = find(a[i].x);
k2 = find(a[i].y);
if (a[i].z) {
f[k1] = k2;
} else if (k1 == k1) {
cout << "NO" << endl;
fl = 0;
break;
}
}
if (fl) cout << "YES" << endl;
}
return 0;
}
和第一个题解差不多()但是我的为什么过不了?
妈呀,地球要爆炸啦!!怎么办啊啊啊啊啊啊啊啊啊啊啊啊啊啊
问题分析:
根据您提供的代码,有几个问题可能导致程序无法通过评测:
1. 在使用 find()函数时,判断条件错误: if (k1 == k1)应该改为 if (k1 == k2)。
2. 在最后输出结果时,需要在每次测试用例结束后输出换行符 \n。
解决方案:
请按照以下方式修改代码: #include <bits/stdc++.h>using namespace std;struct node { int x, y, z;};int t, n, e, c, d, f[1000010], b[3000030], tot, fl, ass, k1, k2;node a[1000010];int find(int x) { if (f[x] == x) return x; return f[x] = find(f[x]);}inline void init(int g) { for (int i = 1; i <= g; i++) f[i] = i;}bool cmp(node a, node b) { return a.z > b.z;}int main() { cin >> t; while (t--) { cin >> n; memset(b, 0, sizeof(b)); memset(f, 0, sizeof(f)); memset(a, 0, sizeof(a)); tot = -1; fl = 1; for (int i = 1; i <= n; i++) { cin >> a[i].x >> a[i].y >> a[i].z; b[++tot] = a[i].x; b[++tot] = a[i].y; } sort(b, b + tot); ass = unique(b, b + tot) - b; for (int i = 1; i <= n; i++) { a[i].x = lower_bound(b, b + ass, a[i].x) - b; a[i].y = lower_bound(b, b + ass, a[i].y) - b; } init(ass); sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= n; i++) { k1 = find(a[i].x); k2 = find(a[i].y); if (a[i].z) { f[k1] = k2; } else if (k1 == k2) { cout << "NO" << endl; fl = 0; break; } } if (fl) cout << "YES" << endl; } return 0;}
请尝试使用以上修改后的代码重新提交。如果问题仍然存在,请提供具体的错误提示信息,以便我能够更好地帮助您解决问题。
球一个最佳答案谢谢啦!这对我非常重要!
|
|