MaximCherchuk

x1 != x2

Mar 31st, 2016
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. const int MAX = 100000;
  4. const int M = 50;
  5. char first[M], second[M], sign[3];
  6. int n, m, k = 0, parent[MAX];
  7. std::pair<int, int> not_equal[MAX];
  8.  
  9. inline int __attribute__((always_inline)) to_int(char *str) {
  10.     return atoi(str + 1) - 1;
  11. }
  12.  
  13. int find_set(int v) {
  14.     if (v == parent[v])
  15.         return v;
  16.     return parent[v] = find_set(parent[v]);
  17. }
  18.  
  19. void union_sets(int a, int b) {
  20.     a = find_set(a);
  21.     b = find_set(b);
  22.     if (a != b)
  23.         parent[b] = a;
  24. }
  25.  
  26. void read() {
  27.     freopen("equal-not-equal.in", "r", stdin);
  28.     freopen("equal-not-equal.out", "w", stdout);
  29.     scanf("%d%d", &n, &m);
  30.     for (int i = 0; i < n; ++i) {
  31.         parent[i] = i;
  32.     }
  33.     for (int i = 0; i < m; ++i) {
  34.         scanf("%s%s%s", first, sign, second);
  35.         int x = to_int(first);
  36.         int y = to_int(second);
  37.         if (!strcmp(sign, "!=")) {
  38.             not_equal[k].first = x;
  39.             not_equal[k++].second = y;
  40.             continue;
  41.         }
  42.         union_sets(x, y);
  43.     }
  44. }
  45.  
  46. void solve() {
  47.     for(int i = 0; i < k; ++i) {
  48.         int x = find_set(not_equal[i].first);
  49.         int y = find_set(not_equal[i].second);
  50.         if(x == y) {
  51.             printf("No");
  52.             return;
  53.         }
  54.     }
  55.     printf("Yes");
  56. }
  57.  
  58. int main() {
  59.     read();
  60.     solve();
  61. }
Advertisement
Add Comment
Please, Sign In to add comment