首页 > 其他 > 详细

程序自动分析(并查集 + 离散化)

时间:2020-08-14 23:32:06      阅读:107      评论:0      收藏:0      [点我收藏+]

链接

感觉正常写即可

技术分享图片
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 10;
int t,n,a,b,e,fa[maxn],aa[maxn],cnt,ssize;
vector<pair<int,int> >va,vb;
int find(int x){
    return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void merge(int a,int b){
     fa[find(a)] = find(b);
}
int main(){
    //freopen("in","r",stdin);
    ios::sync_with_stdio(0);
    cin >> t;
    while(t--) {
        va.clear();vb.clear();
        cnt = 0;
        int flag = 1;
        cin >> n;
        for(int i = 1; i <= n; i++){
           cin >> a >> b >> e;
           if(e) va.push_back(make_pair(a,b));
           else {
               aa[++cnt] = a,aa[++cnt] = b;
               vb.push_back(make_pair(a,b));
           }
        }
        sort(aa + 1,aa + 1 + cnt);
        ssize = unique(aa + 1,aa + 1 + cnt) - aa - 1;
        for(int i = 1; i <= ssize; i++)
            fa[i] = i;
        for(int i = 0; i < va.size(); i++){
            a =  lower_bound(aa + 1, aa + 1 + ssize,va[i].first) - aa;
            b = lower_bound(aa + 1, aa + 1 + ssize,va[i].second) - aa;
            merge(a,b);
        }
        for(int i = 0; i < vb.size(); i++){
            a =  lower_bound(aa + 1, aa + 1 + ssize,vb[i].first) - aa;
            b = lower_bound(aa + 1, aa + 1 + ssize,vb[i].second) - aa;
            if(find(a) == find(b)){
                flag = 0;
                break;
            }
        }
         cout << (flag == 1 ?"YES" : "NO") << endl;
    }
    return 0;
}
View Code

 

程序自动分析(并查集 + 离散化)

原文:https://www.cnblogs.com/xcfxcf/p/13505617.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!