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
| import java.io.*; import java.util.*;
class Main{ public static int N = 100010,P = N*2 - 1; public static Option[] os = new Option[N]; public static int[] hash = new int[N*2],find = new int[N*2]; public static Scanner sc = new Scanner(System.in); public static int get(int x){ int k = x % P; for(int i = k;i < N * 2 - 1;i ++){ if(hash[i] == -1 || hash[i] == x) return i; } return -1; } public static int find(int x){ if(find[x] != x) find[x] = find(find[x]); return find[x]; } public static void main(String[] args){ int k = sc.nextInt(); while((k--)!=0){ for(int i = 1;i < N*2;i++) find[i] = i; Arrays.fill(hash,-1); int n = sc.nextInt(); for(int i = 1;i <= n;i++){ int x1 = sc.nextInt(),x2 = sc.nextInt(),o = sc.nextInt(); os[i] = new Option(x1,x2,o); } for(int i = 1;i <= n;i++){ if(os[i].o == 1) { int x1 = os[i].x1,x2 = os[i].x2; int a = get(x1),b = get(x2); hash[a] = x1; hash[b] = x2; int pa = find(a),pb = find(b); if(pa != pb) find[pa] = pb; } } int index = 0; for(int i = 1;i <= n;i++){ if(os[i].o == 0){ int x1 = os[i].x1,x2 = os[i].x2; int a = get(x1),b = get(x2); int pa = find(a),pb = find(b); if(pa == pb){ index = 1; System.out.println("NO"); break; } } } if(index == 0) System.out.println("YES"); } } static class Option{ int x1,x2,o; public Option(int x1,int x2,int o){ this.x1 = x1; this.x2 = x2; this.o = o; } } }
|