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
  • 相关阅读:
    OpenCV 简介
    无缝滚动
    Date 与 switch的运用
    js object(对象)
    arr.sort()排序方法
    删除
    评分
    延时提示框
    数字相加求和
    自定义右键菜单
  • 原文地址:https://www.cnblogs.com/wally/p/3129326.html
Copyright © 2011-2022 走看看