自认为逻辑没问题罢
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, f[200010], a[200010], b[200010], c[200010];
void init() {
for(int i = 1; i <= n; i++)
f[i] = i;
}
int find(int u) {
if(f[u] == u) return u;
return f[u] = find(f[u]);
}
void merge(int u, int v) {
if(find(u) != find(v)) f[u] = v;
}
signed main() {
scanf("%lld%lld", &n, &m);
for(int i = 1; i <= m; i++)
scanf("%lld%lld", &a[i], &b[i]);
for(int i = 1; i <= n; i++) scanf("%lld", &c[i]);
init();
for(int i = 1; i <= m; i++)
if(c[a[i]] != c[b[i]]) merge(a[i], b[i]);
for(int i = 1; i <= m; i++) {
if(c[a[i]] == c[b[i]] && find(a[i]) == find(b[i])) {
printf("Yes");
return 0;
}
}
printf("No");
return 0;
}