社区讨论

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 条回复,欢迎继续交流。

正在加载回复...