40分求助
查看原帖
40分求助
553063
xykzzz楼主2024/5/4 20:42

评测记录

#include<bits/stdc++.h>
using namespace std;
int t, n;
struct edge {
  int u, v, f; 
} e[300010];
int fa[300010];
int find(int x) {
  return fa[x]==x?x:fa[x]=find(fa[x]);
}
void merge(int x, int y) {
  int fx=find(x), fy=find(y);
  fa[fx]=fy;
}
int main() {
  cin>>t;
  while (t--) {
    cin>>n;
    int cnt=0;
    map<int, int> mp;
    for (int i=1; i<=n; i++) {
      cin>>e[i].u>>e[i].v>>e[i].f;
      if (!mp[e[i].u]) mp[e[i].u]=e[i].u=++cnt;
      else e[i].u=mp[e[i].u];
      if (!mp[e[i].v]) mp[e[i].v]=e[i].v=++cnt;
      else e[i].v=mp[e[i].v];
    } 
    for (int i=1; i<=300000; i++)
      fa[i]=i;
    for (int i=1; i<=n; i++) {
      if (e[i].f==1) merge(e[i].u, e[i].v);
    }
    bool flag=1;
    for (int i=1; i<=n; i++) {
      if (e[i].f==0&&find(e[i].u)==find(e[i].v))
        flag=0; 
    }
    if (flag) cout<<"YES\n";
    else cout<<"NO\n";
  }
  return 0;
}
2024/5/4 20:42
加载中...