社区讨论
90分代码求调
P1955[NOI2015] 程序自动分析参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m5z55nc9
- 此快照首次捕获于
- 2025/01/16 17:41 去年
- 此快照最后确认于
- 2025/11/04 11:30 4 个月前
CPP
#include <map>
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
long long f[100005],n,cnt,tot=0;
pair<long long,long long> rule[100005];
map<int,int> lisan;
long long Find(long long x){
if(f[x]==x){
return x;
}
return f[x]=Find(f[x]);
}
void Union(long long x,long long y){
x=Find(x);
y=Find(y);
f[x]=y;
}
void slove(){
memset(f,0,sizeof f);
cnt=0;
scanf("%lld",&n);
for(int i=1;i<=n;i++){
long long x,y,e;
scanf("%lld %lld %lld",&x,&y,&e);
if(lisan[x]==0){
lisan[x]=++tot;
}
if(lisan[y]==0){
lisan[y]=++tot;
}
x=lisan[x];
y=lisan[y];
if(f[x]==0){
f[x]=x;
}
if(f[y]==0){
f[y]=y;
}
if(e){
Union(x,y);
}
else{
rule[++cnt]=make_pair(x,y);
}
}
for(int i=1;i<=cnt;i++){
if(Find(rule[i].first)==Find(rule[i].second)){
printf("NO\n");
return;
}
}
printf("YES\n");
}
int main() {
long long t;
scanf("%lld",&t);
while(t--){
slove();
}
return 0;
}
二号用例RE了
回复
共 1 条回复,欢迎继续交流。
正在加载回复...