zoukankan      html  css  js  c++  java
  • 人人都是好朋友(离散化 + 并查集)

    离散化

    #include<bits/stdc++.h>
    using namespace std;
    const int MAX = 2e6 + 5;
    int n, f[MAX], a[MAX], b[MAX], c[MAX];
    vector<int> d;
    int find(int v) {
        return f[v] == v ? v : f[v] = find(f[v]);
    }
    void solve() {
        int t;
        scanf("%d", &t);
        int sums = 0;
        while (t--) {
            d.clear();
            scanf("%d", &n);
            sums += n;
            for (int i = 1; i <= 2 * n; ++i) f[i] = i;
            for (int i = 1; i <= n; ++i) {
                scanf("%d%d%d", &a[i], &b[i], &c[i]);
                d.push_back(a[i]);
                d.push_back(b[i]);
            }
            sort(d.begin(), d.end());//排序
            d.erase(unique(d.begin(), d.end()), d.end());//删除重复元素
            for (int i = 1; i <= n; ++i) {
                //索引元素离散化后对应的值
                a[i] = lower_bound(d.begin(), d.end(), a[i]) - d.begin() + 1;
                b[i] = lower_bound(d.begin(), d.end(), b[i]) - d.begin() + 1;
            }
            for (int i = 1; i <= n; ++i) {
                if (c[i] == 1) {
                    int A = find(a[i]), B = find(b[i]);
                    f[B] = A;
                }
            }
            bool flag = true;
            for (int i = 1; i <= n; ++i) {
                if (c[i] == 0) {
                    int A = find(a[i]), B = find(b[i]);
                    if (A == B) { flag = false; break; }
                }
            }
            printf("%s
    ", flag == false ? "NO" : "YES");
        }
    }
    int main(){
        solve();
        return 0;
    }
    View Code
  • 相关阅读:
    第72天: PySpider框架的使用
    第71天: Python Scrapy 项目实战
    Web前端资源汇总
    1201即将到来
    C#自定义事件模拟风吹草摇摆
    HTML5 Canvas爱心时钟代码
    CSS3圆环动态弹出菜单
    CSS3实现Loading动画特效
    HTML5优势
    CSS3扁平化Loading动画特效
  • 原文地址:https://www.cnblogs.com/xcfxcf/p/12733425.html
Copyright © 2011-2022 走看看