zoukankan      html  css  js  c++  java
  • hdu 2860(并查集应用)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2860

    思路:多了一个记录每个集合最小值的value数组而已,然后判断的时候小心一点就可以了。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 #define MAXN 100000+100
     7 int parent[MAXN];
     8 int value[MAXN];
     9 int n,m,k;
    10 
    11 void Initiate()
    12 {
    13     memset(value,-1,(n+2)*sizeof(int));
    14     for(int i=0;i<n;i++)parent[i]=i;
    15     while(k--){
    16         int u,v;
    17         scanf("%d%d",&u,&v);
    18         if(value[v]==-1||u<value[v])value[v]=u;
    19     }
    20 }
    21 
    22 
    23 int Find(int x)
    24 {
    25     if(x==parent[x])
    26         return x;
    27     parent[x]=Find(parent[x]);
    28     return parent[x];
    29 }
    30 
    31 int main(){
    32     char str[11];
    33     int u,v;
    34     while(~scanf("%d%d%d",&n,&k,&m))
    35     {
    36         Initiate();
    37         while(m--){
    38             scanf("%s",str);
    39             if(str[0]=='A'){
    40                 scanf("%d%d",&u,&v);
    41                 if(parent[v]!=v){ puts("Reject");continue;}
    42                 puts("Accept");
    43                 if(value[v]==-1||u<value[v])value[v]=u;
    44             }else if(str[0]=='M'){
    45                 scanf("%d%d",&u,&v);
    46                 if(parent[u]!=u||parent[v]!=v||u==v){
    47                     puts("Reject");
    48                     continue;
    49                 }
    50                 puts("Accept");
    51                 parent[v]=u;
    52                 if(value[v]!=-1&&(value[u]==-1||value[u]>value[v])){
    53                     value[u]=value[v];
    54                 }
    55             }else {
    56                 scanf("%d",&u);
    57                 if(parent[u]==u&&value[u]!=-1)printf("Lowest rate: %d.\n",value[u]);
    58                 else if(parent[u]==u&&value[u]==-1)printf("Company %d is empty.\n",u);
    59                 else printf("Company %d is a part of company %d.\n",u,Find(u));
    60             }
    61         }
    62         puts("");
    63     }
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    [TJOI2013]单词
    [AHOI2005]病毒检测
    [SCOI2016]围棋
    [SDOI2008]Sandy的卡片
    [POI2005]Sza-Template
    [Usaco2015 Feb]Censoring
    浅谈算法——KMP
    yii2邮件配置教程,报Expected response code 250 but got code "553"原因
    yii2设置发送邮件的一些配置
    js 的正则表达式 部分展示test()方法的验证功能
  • 原文地址:https://www.cnblogs.com/wally/p/3129326.html
Copyright © 2011-2022 走看看