Chinese questions
Direct Dfs down, encounter the point of repeated visits, determine the ring three-part XOR and is greater than 0
Code:
#include <cstdio> #include <cstring> #include <algorithm>using namespace std;const int N = 100005;const int M = 400005;int N, m;struct Edge {int u, V, W; Edge () {} edge (int u, int v, int w) {this->u = u; This->v = v; This->w = W; }} edge[m];int Head[n], nxt[m], en;void init () {memset (head,-1, sizeof (head)); En = 0;} void Add_edge (int u, int v, int w) {Edge[en] = Edge (U, V, W); Nxt[en] = Head[u]; Head[u] = en++;} int vis[n], xor[n];bool dfs (int u, int x) {Vis[u] = 1; Xor[u] = x; for (int i = head[u]; i + 1; i = Nxt[i]) {int v = EDGE[I].V; int w = EDGE[I].W; if (Vis[v]) {if ((xor[u]^xor[v]^w) > 0) return true; Continue } if (Dfs (v, x^w)) return true; } return false;} BOOL Judge () {for (int i = 1; I <= n; i++) if (!vis[i]) if (DFS (i, 0)) return true; return false;} int main () {while (~scanf ("%d%d", &n, &m)) { Init (); int U, V, W; while (m--) {scanf ("%d%d%d", &u, &v, &w); Add_edge (U, V, W); Add_edge (V, U, W); } memset (Vis, 0, sizeof (VIS)); printf ("%s\n", Judge ()? "Yes": "No"); } return 0;}
Zstuoj 4191 Non-circular graph finding ring (DFS)