调了一晚上也没看错啥错误
4个点WA
求大佬帮忙康康
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 2e+5+100;
int n,m,cnt;
bool flag;
int a[maxn],f[maxn],h[maxn];
int p[maxn],q[maxn];
bool vis[maxn];
int he[maxn],G[maxn<<1],ne[maxn<<1],_cnt=1;
int c[2],t[maxn];
int val[maxn];
void add_Edge(int u,int v){
G[_cnt] = v;
ne[_cnt] = he[u];
he[u] = _cnt++;
}
void init(){
cnt=0;_cnt=1;flag=true;
memset(val,0,sizeof(val));
memset(vis,false,sizeof(vis));
memset(he,0,sizeof(he));
memset(t,0x3f,sizeof(t));
for(int i=1;i<=maxn;++i) f[i] = i,h[i] = 1;
}
int anc(int x){
if(x==f[x]) return x;
return f[x]=anc(f[x]);
}
void merge(int x,int y){
f[anc(x)] = anc(y);
}
bool dfs(int u,int o){
vis[u] = true;
t[u] = o;
c[o] += val[u];
for(int i=he[u];i;i=ne[i]){
int v=G[i];
if(t[u]==t[v]) return false;
if(vis[v]) continue;
if(!dfs(v,o^1))return false;
}
return true;
}
signed main(){
freopen("618517.in","r",stdin);
//freopen("ddd.out","w",stdout);
int T;scanf("%lld",&T);
while(T--){
init();
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;++i)scanf("%lld",a+i);
for(int i=1;i<=n;++i){
int x;scanf("%lld",&x);
a[i]-=x;
}
for(int i=1;i<=m;++i){
int opt,u,v;scanf("%lld%lld%lld",&opt,&u,&v);
if(opt==1){
p[++cnt] = u;q[cnt] = v;
}else{
merge(u,v);
}
}
for(int i=1;i<=n;++i){
val[anc(i)] += a[i];
}
//for(int i=1;i<=n;++i) printf("%d ",anc(i));
for(int i=1;i<=cnt;++i){
int u=anc(p[i]),v=anc(q[i]);
add_Edge(u,v);
add_Edge(v,u);
}
for(int i=1;i<=n;++i){
//printf("%d %d\n",i,anc(i));
if(t[i]!=0x3f3f3f3f3f3f3f3f||anc(i)!=i) continue;
//printf("myc %d\n",i);
c[0] = c[1] = 0;
bool pd=dfs(i,0);
if(pd&&(c[0]!=c[1])) flag=false;
if(!pd && (((c[0]^c[1])&1ll))) flag=false;
//printf("ccf %d\n",cnt);
}
printf("%s\n",flag?"YES":"NO");
}
return 0;
}