Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- const int MAX = 100000;
- const int M = 50;
- char first[M], second[M], sign[3];
- int n, m, k = 0, parent[MAX];
- std::pair<int, int> not_equal[MAX];
- inline int __attribute__((always_inline)) to_int(char *str) {
- return atoi(str + 1) - 1;
- }
- int find_set(int v) {
- if (v == parent[v])
- return v;
- return parent[v] = find_set(parent[v]);
- }
- void union_sets(int a, int b) {
- a = find_set(a);
- b = find_set(b);
- if (a != b)
- parent[b] = a;
- }
- void read() {
- freopen("equal-not-equal.in", "r", stdin);
- freopen("equal-not-equal.out", "w", stdout);
- scanf("%d%d", &n, &m);
- for (int i = 0; i < n; ++i) {
- parent[i] = i;
- }
- for (int i = 0; i < m; ++i) {
- scanf("%s%s%s", first, sign, second);
- int x = to_int(first);
- int y = to_int(second);
- if (!strcmp(sign, "!=")) {
- not_equal[k].first = x;
- not_equal[k++].second = y;
- continue;
- }
- union_sets(x, y);
- }
- }
- void solve() {
- for(int i = 0; i < k; ++i) {
- int x = find_set(not_equal[i].first);
- int y = find_set(not_equal[i].second);
- if(x == y) {
- printf("No");
- return;
- }
- }
- printf("Yes");
- }
- int main() {
- read();
- solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment