程序自动分析
题目链接:https://www.luogu.com.cn/problem/P1955
题意:
给定一系列相等以及不等关系,判断是否能够成立
思路:
由于不等式没有传递性,即a不等于b,b不等于c,无法满足a不等于c
也无法满足a等于c
因此需要先计算相等关系,再判断不等关系是否成立
离散化时如果用map需要放在全局变量防止RE,solve里也要调用clear方法清空
int f[maxn];
int find(int x){
if(f[x]!=x){
f[x]=find(f[x]);
}
return f[x];
}
void merge(int x,int y){
if(find(x)!=find(y)){
f[find(x)]=find(y);
}
}
map<int,int>mp;
void solve(){
int n;cin>>n;
int cnt=1;
for(int i=1;i<=2*n;i++)f[i]=i;
mp.clear();
vector<pii>x;
for(int i=1;i<=n;i++){
int a,b,c;cin>>a>>b>>c;
if(mp[a]==0)mp[a]=cnt++;
if(mp[b]==0)mp[b]=cnt++;
if(c==1){
merge(mp[a],mp[b]);
}else{
x.pb({mp[a],mp[b]});
}
}
for(int i=0;i<x.size();i++){
int a=x[i].fi,b=x[i].se;
if(find(a)==find(b)){
cout<<"NO"<<endl;
return;
}
}
cout<<"YES"<<endl;
}

浙公网安备 33010602011771号