为什么有的测试点会没有输出,非常的疑惑,求求dalao解答。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int con=1e5+1;
int n,m,k;
int x[maxn],y[maxn],c[maxn];
long long ans=0;
int f[maxn*2];
struct node{
int p,w;
}e[maxn*2];
int rd(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
int find(int x){
if(e[x].p==x) return x;
int t=find(e[x].p);
e[x].w^=e[e[x].p].w;
return e[x].p=t;
}
int main(){
n=rd();m=rd();k=rd();
con=n;
int po=-1;
for(int i=1;i<=k;i++){
x[i]=rd();y[i]=rd();c[i]=rd();
if(x[i]==1&&y[i]==1) po=c[i];
y[i]+=con;
}
int flag=0;
if(po!=1){
for(int i=1;i<=n+m;i++) e[i].p=i,e[i].w=0;
e[n+1].p=1;
for(int i=1;i<=k;i++){//c[1][1]=0
if(x[i]==1&&y[i]==1) continue;
int o=(x[i]-1)*(y[i]-con-1);
int d;
int fx=find(x[i]),fy=find(y[i]);
if(o%2==1) d=(c[i]+1)%2;
if(o%2==0) d=c[i];
if(fx!=fy){
e[fx].p=y[i];
int x1=e[x[i]].w^e[y[i]].w;
e[fx].w=1;
if(x1^1!=d) e[fx].w=0;
}
else{
if(e[x[i]].w^e[y[i]].w!=d){
flag=1;
break;
}
}
}
if(flag==0){
int sum=0;
for(int i=1;i<=n+m;i++) if(find(i)==i) sum++;
ans+=pow(2,sum-1);
ans%=1000000000;
}
}
if(po!=0){
for(int i=1;i<=n+m;i++) e[i].p=i,e[i].w=0;
e[n+1].p=1;
int flag=0;
for(int i=1;i<=k;i++){//c[1][1]=1
if(x[i]==1&&y[i]==1) continue;
int fx=find(x[i]),fy=find(y[i]);
int o=(x[i]-1)*(y[i]-con-1);
int d;
if(o%2==1) d=c[i];
if(o%2==0) d=(c[i]+1)%2;
if(fx!=fy){
e[fx].p=y[i];
int x1=e[x[i]].w^e[y[i]].w;
e[fx].w=1;
if(x1^1!=d) e[fx].w=0;
}
else{
if(e[x[i]].w^e[y[i]].w!=d){
flag=1;
break;
}
}
}
if(flag==0){
int sum=0;
for(int i=1;i<=n+m;i++) if(find(i)==i) sum++;
ans+=pow(2,sum-1);
}
}
cout<<ans%1000000000;
return 0;
}