1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #include<cstdio> #include<algorithm> #include<cstring> #include<vector> #include<queue> using namespace std; vector<int> a[20001]; int color[20001]; void dfs(int node, int c){ color[node] = c; for(int i=0; i<a[node].size(); i++){ int next = a[node][i]; if(color[next]==0) dfs(next, 3-c); } } int main(){ int t; scanf("%d\n", &t); while(t--){ int n,m; scanf("%d %d", &n, &m); for(int i=1; i<=n; i++){ a[i].clear(); color[i] = 0; } for(int i=0; i<m; i++){ int u,v; scanf("%d %d", &u, &v); a[u].push_back(v); a[v].push_back(u); } for(int i=1; i<=n; i++){ if(color[i] == 0) dfs(i,1); } bool ok = true; for(int i=1; i<=n; i++){ for(int k=0; k<a[i].size(); k++){ int j = a[i][k]; if(color[i] == color[j]) ok = false; } } } printf("%s\n", ok ? "YES" : "NO"); } | cs |