zoukankan      html  css  js  c++  java
  • P1955 [NOI2015]程序自动分析

    题意

    略(这东西应该都能看懂)

    思路

    先排序,把所有e=1的操作放在前面,然后再进行e=0的操作在进行e=1的操作的时候,我们只要把它约束的两个变量放在同一个集合里面即可。再e=0,即存在一条不相等的约束条件,对于它约束的两个变量,如果在一个集合里面,那就不可能满足!如不相等的约束条件都满足,那就YES。

    显然并查集,但是因为数据范围到了 (1e9) 所以我们需要使用离散化(不开也行,也就是会MLE)

    代码

    #include<cstdio>
    #include<iostream>
    #include<algorithm> 
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<cstdlib>
    #define int long long
    
    using namespace std;
    
    int t,n,f[1000007],book[1000007*3];
    
    struct node{
    	int x,y,e;
    }a[1000001];
    bool cmp(node a,node b){
    	return a.e>b.e;
    }
    
    int find(int x){
    	if(x==f[x]) return x;
    	return f[x]=find(f[x]);
    }
    
    signed main(){
    	scanf("%lld",&t);
    	while(t--){
    		int tot=-1;
    		memset(book,0,sizeof(book));
    		memset(a,0,sizeof(a));
    		memset(f,0,sizeof(f));
    		int flag=1;
    		scanf("%lld",&n);
    		for(int i=1;i<=n;i++)
    		{
    			scanf("%lld %lld %lld",&a[i].x,&a[i].y,&a[i].e);
    			book[++tot]=a[i].x;
    			book[++tot]=a[i].y;
    		}
    		sort(book,book+tot);//排序
    		int reu=unique(book,book+tot)-book;//去重
    		for(int i=1;i<=n;++i){
    			a[i].x=lower_bound(book,book+reu,a[i].x)-book;
    			a[i].y=lower_bound(book,book+reu,a[i].y)-book;
    		}
    		for(int i=1;i<=reu;i++) f[i]=i;//初始化
    		sort(a+1,a+n+1,cmp);//按e排序
    		for(int i=1;i<=n;i++){
    			int r1=find(a[i].x);
    			int r2=find(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;
    }
    

    [注意初始化 f[i]=i \ 没了 ]

  • 相关阅读:
    hdu 4297 One and One Story 夜
    hdu 4280 Island Transport 夜
    1389. Roadworks 夜
    hdu 4289 Control 夜
    hdu 4291 A Short problem 夜
    hdu 4284 Travel 夜
    1080. Map Coloring 夜
    正则中的转义符\
    起重复出现作用的量词*和+
    安卓的权限大全和动态使用安卓权限
  • 原文地址:https://www.cnblogs.com/jasony/p/13339549.html
Copyright © 2011-2022 走看看