社区讨论

WA on #3求调

P1955[NOI2015] 程序自动分析参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lue2rsj0
此快照首次捕获于
2024/03/30 20:34
2 年前
此快照最后确认于
2024/03/30 22:26
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int maxn=19260817;
int fa[maxn],siz[maxn];
int fd(int x){
  if(!fa[x])fa[x]=x;
  return x==fa[x]?x:fa[x]=fd(fa[x]);
} 
void union_(int u,int v){
  if(!fa[u])fa[u]=u;
  if(!fa[v])fa[v]=v;
  int fdu=fd(u),fdv=fd(v);
  if(fdu==fdv)return;
  if(siz[fdu]>siz[fdv])swap(fdu,fdv);
  fa[fdu]=fdv;siz[fdv]+=siz[fdu];
}
struct Input{
  int i,j,op;
}input[100007];
bool cmp(Input a,Input b){
  return a.op>b.op;
}
int t,n;
int main(){
  scanf("%d",&t);
  while(t--){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d%d%d",&input[i].i,&input[i].j,&input[i].op);
    sort(input+1,input+n+1,cmp);bool flag=true;
    for(int i=1;i<=n;i++){
      int ii=input[i].i,ij=input[i].j,iop=input[i].op;
      if(iop)union_(ii%maxn,ij%maxn);
      else if(fd(ii%maxn)==fd(ij%maxn)){flag=false;printf("NO\n");break;}
    }if(flag)printf("YES\n");
  }
  return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...