zoukankan      html  css  js  c++  java
  • codeforces 468B two set(并查集)

    codeforces 468B two set(并查集)
    n+1 表示 B 组
    n+2 表示 A 组

    按照 这题的做法
    应该是 如果 满足 num[ i ] a-num[ i ] 则他们同一组 但不一定 就一定是 都是 A 组
    也可能都是 B 组 然而如果不满足这个条件的话,就直接加入 B组
    然后如果满足 num[ i ] b-num[ i ] 则加入同一组 然后不满足就 加入 A 组

     1 #include <bits/stdc++.h> 
     2 using namespace std ; 
     3 
     4 const int maxn = 1e5+11 ; 
     5 int n,a,b ; 
     6 int num[maxn],fa[maxn] ;  
     7 
     8 inline int find(int x) 
     9 {
    10     if(fa[x] == x) return x ; 
    11     return fa[x] = find(fa[x]) ; 
    12 }
    13 
    14 int main() 
    15 {
    16     scanf("%d%d%d",&n,&a,&b) ; 
    17     map<int,int> mp ; 
    18     for(int i=1;i<=n;i++) 
    19         scanf("%d",&num[ i ]) , mp[ num[ i ] ] = i ; 
    20     
    21     int x ; 
    22     for(int i=1;i<=n+2;i++) fa[ i ] = i ; 
    23     for(int i=1;i<=n;i++) 
    24     {
    25         x = find( i ) ; 
    26         if( mp.count( a-num[ i ] ) ) 
    27             fa[ x ] = find( mp[ a-num[ i ] ] ) ;  
    28         else  
    29             fa[ x ] = find( n+1 ) ;    //  不行的话就加入B 组 
    30         x = find( i ) ; 
    31         if( mp.count( b-num[ i ] ) ) 
    32             fa[ x ] = find( mp[ b-num[ i ] ] ) ; 
    33         else
    34             fa[ x ] = find( n+2 ) ;  
    35     }
    36     if( find(n+1)==find(n+2) ) 
    37     {
    38         printf("NO
    ") ;  
    39         return 0 ; 
    40     }
    41     printf("YES
    ") ; 
    42     for(int i=1;i<=n;i++) 
    43         printf("%d ",find( i )==find(n+1) ) ; 
    44     
    45     return 0 ; 
    46 }
  • 相关阅读:
    Django 常见问题
    post和get的区别
    Django 基础学习笔记二
    Django 中的分页器
    Python 微服务框架 Nameko 微服务通信(RabbitMQ)
    《大数据白皮书 2020.12》解读
    练习Div+Css
    利用JAVAScript调用WebService
    统计在线人数和历史访问人数
    自己写的一个DBHelper
  • 原文地址:https://www.cnblogs.com/third2333/p/7115094.html
Copyright © 2011-2022 走看看