zoukankan      html  css  js  c++  java
  • bzoj4195 noi2015 day1 t1

    离散化+并查集

    set比unique慢好多

    unique

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<ctime>
     5 #include<cstdlib>
     6 #include<iostream>
     7 #include<algorithm>
     8 #include<set>
     9 #define clr(a,x) memset(a,x,sizeof(a))
    10 #define rep(i,l,r) for(int i=l;i<r;i++)
    11 using namespace std;
    12 int read()
    13 {
    14     char c=getchar();
    15     int ans=0,f=1;
    16     while(!isdigit(c)){
    17         if(c=='-') f=-1;
    18         c=getchar();
    19     }
    20     while(isdigit(c)){
    21         ans=ans*10+c-'0';
    22         c=getchar();
    23     }
    24     return ans*f;
    25 }
    26 const int maxn=200005;
    27 int f[maxn],a[maxn][3],b[maxn][2],c[maxn];
    28 int find(int a)
    29 {
    30     return (f[a]==a?f[a]:f[a]=find(f[a]));
    31 }
    32 int main()
    33 {    
    34     freopen("prog10.in","r",stdin);
    35     freopen("prog10.out","w",stdout);
    36     int t=read();
    37     while(t--){    
    38         int n=read(),cnt=0,cnt1=0;
    39         bool flag=1;
    40         clr(a,0),clr(b,0),clr(c,0);
    41         rep(i,0,maxn) f[i]=i;
    42         rep(i,0,n){
    43             a[i][0]=read();
    44             a[i][1]=read();
    45             a[i][2]=read();
    46             if(!a[i][2]){
    47                 b[cnt][0]=a[i][0];
    48                 b[cnt++][1]=a[i][1];
    49             }
    50             c[cnt1++]=a[i][0];
    51              c[cnt1++]=a[i][1];
    52         }
    53         cnt1=unique(c,c+(n<<1))-c;
    54         sort(c,c+cnt1);
    55         rep(i,0,n){
    56             if(a[i][2]==1){
    57                 f[find(lower_bound(c,c+cnt1,a[i][0])-c)]=find(lower_bound(c,c+cnt1,a[i][1])-c);
    58             }
    59         }
    60         rep(i,0,cnt){
    61             if(find(lower_bound(c,c+cnt1,b[i][0])-c)==find(lower_bound(c,c+cnt1,b[i][1])-c)){
    62                 flag=0;break;
    63             }
    64         }
    65         if(flag) printf("YES
    ");
    66         else printf("NO
    ");
    67     }
    68     return 0;
    69 }
    View Code

     set

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<ctime>
     5 #include<cstdlib>
     6 #include<iostream>
     7 #include<algorithm>
     8 #include<set>
     9 #define clr(a,x) memset(a,x,sizeof(a))
    10 #define rep(i,l,r) for(int i=l;i<r;i++)
    11 using namespace std;
    12 int read()
    13 {
    14     char c=getchar();
    15     int ans=0,f=1;
    16     while(!isdigit(c)){
    17         if(c=='-') f=-1;
    18         c=getchar();
    19     }
    20     while(isdigit(c)){
    21         ans=ans*10+c-'0';
    22         c=getchar();
    23     }
    24     return ans*f;
    25 }
    26 set<int>S;
    27 const int maxn=200005;
    28 int f[maxn],a[maxn][3],b[maxn][2],c[maxn];
    29 int find(int a)
    30 {
    31     return (f[a]==a?f[a]:f[a]=find(f[a]));
    32 }
    33 int main()
    34 {    
    35     freopen("prog10.in","r",stdin);
    36     freopen("prog10.out","w",stdout);
    37     int t=read();
    38     while(t--){
    39         S.clear();
    40         int n=read(),cnt=0,cnt1=0;
    41         bool flag=1;
    42         clr(a,0),clr(b,0),clr(c,0);
    43         rep(i,0,n<<1) f[i]=i;
    44         rep(i,0,n){
    45             a[i][0]=read();
    46             a[i][1]=read();
    47             a[i][2]=read();
    48             if(!a[i][2]){
    49                 b[cnt][0]=a[i][0];
    50                 b[cnt++][1]=a[i][1];
    51             }
    52             if(S.find(a[i][0])==S.end()){
    53                 S.insert(a[i][0]);
    54                 c[cnt1++]=a[i][0];
    55             }
    56             if(S.find(a[i][1])==S.end()){    
    57                 S.insert(a[i][1]);
    58                 c[cnt1++]=a[i][1];
    59             }
    60         }
    61         sort(c,c+cnt1);
    62         rep(i,0,n){
    63             if(a[i][2]==1){
    64                 f[find(lower_bound(c,c+cnt1,a[i][0])-c)]=find(lower_bound(c,c+cnt1,a[i][1])-c);
    65             }
    66         }
    67         rep(i,0,cnt){
    68             if(find(lower_bound(c,c+cnt1,b[i][0])-c)==find(lower_bound(c,c+cnt1,b[i][1])-c)){
    69                 flag=0;break;
    70             }
    71         }
    72         if(flag) printf("YES
    ");
    73         else printf("NO
    ");
    74     }
    75     return 0;
    76 }
    View Code
  • 相关阅读:
    mac下使用brew安装mongodb
    从零构建vue+webpack (一)
    常用软件集合(2018/08/22)
    solr集群安装部署
    zookeeper集群部署
    redis集群部署
    linux 安装jdk
    zTab layui多标签页组件
    spring boot集成swagger2
    SSH客户端,FinalShell服务器管理,远程桌面加速软件,支持Windows,Mac OS X,Linux,版本2.6.3.1
  • 原文地址:https://www.cnblogs.com/chensiang/p/4673647.html
Copyright © 2011-2022 走看看