zoukankan      html  css  js  c++  java
  • AcWing 237. 程序自动分析

    算法

    并查集+离散化

    思路

    离散化

    sort(l,l+tot);
            int start=unique(l,l+tot)-l; 
            for(int i=1;i<=n;++i){
               a[i].x=lower_bound(l,l+start,a[i].x)-l;
               a[i].y=lower_bound(l,l+start,a[i].y)-l;   
            } 
    

    并查集

    相等的在一个集合

    注意

    要先处理相等

    代码

    #include <bits/stdc++.h> 
    using namespace std;
    int t,n,f[1000005],l[1000007*3];
    inline long long read(){
    	long long num=0;int z=1;char c=getchar();
    	if(c=='-') z=-1;
    	while((c<'0'||c>'9')&&c!='-') c=getchar();
    	if(c=='-') z=-1,c=getchar();
    	while(c>='0'&&c<='9') num=(num<<1)+(num<<3)+(c^48),c=getchar();
    	return z*num;
    }
    struct node{
        int x,y,e;
    }a[1000001];  
    bool cmp(node a,node b){
        return a.e>b.e;
    }
    inline void pre(int o){
        for(int i=1;i<=o;i++)  f[i]=i;
    } 
    int get(int x){
        if(x==f[x]) return x;
        return f[x]=get(f[x]);
    }
    int main(){
        t=read();
        while(t--){
          int tot=-1;
          memset(l,0,sizeof(l));
          memset(a,0,sizeof(a));
          memset(f,0,sizeof(f));
        int flag=1;
            n=read();
    
            for(int i=1;i<=n;i++){
                a[i].x=read();a[i].y=read();a[i].e=read();
                l[++tot]=a[i].x;
                l[++tot]=a[i].y;
            }
            sort(l,l+tot);
            int start=unique(l,l+tot)-l; 
            for(int i=1;i<=n;++i){
               a[i].x=lower_bound(l,l+start,a[i].x)-l;
               a[i].y=lower_bound(l,l+start,a[i].y)-l;   
            } 
            pre(start);   
            sort(a+1,a+n+1,cmp); 
            for(int i=1;i<=n;i++){
                int r1=get(a[i].x);
                int r2=get(a[i].y);
                if(a[i].e){
                    f[r1]=r2;  
                }
    			else if(r1==r2){
                    printf("NO
    ");
                    flag=0; 
                    break;
                }
            }
            if(flag)printf("YES
    ");
        }
        return 0;
    }
    

      

     

  • 相关阅读:
    用户使用情况报告
    项目验收与总结
    Beta阶段冲刺-6
    Beta阶段冲刺-5
    Beta阶段冲刺-4
    Beta阶段冲刺-3
    Beta阶段冲刺-2
    Beta阶段冲刺-1
    『编程题全队』Beata阶段项目复审
    『编程题全队』Beta 阶段用户使用调查报告
  • 原文地址:https://www.cnblogs.com/ruanmowen/p/12726670.html
Copyright © 2011-2022 走看看