zoukankan      html  css  js  c++  java
  • poj 1703

    http://poj.org/problem?id=1703

    rank 用于记录祖先的等级

    opp 用于记录敌人。。

     1 #include <iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int f[100005];
     5 int rank[100005],opp[100005];
     6 char str[3];
     7 void init(int n){
     8     for(int i=1;i<=n;i++){
     9         f[i] = i;
    10         rank[i]=opp[i]=0;
    11     }
    12 }
    13 
    14 int find(int x){
    15     if(x!=f[x])
    16         f[x] = find(f[x]);
    17     return f[x];
    18 }
    19 
    20 void unin(int a,int b){
    21     int fa = find(a);
    22     int fb = find(b);
    23     if(fa==fb)
    24         return ;
    25     if(rank[fa]>rank[fb])
    26         f[fb] = fa;
    27     else{
    28         f[fa] = f[fb];
    29         if(rank[fa]==rank[fb])
    30             rank[fb]++;
    31     }
    32 }
    33 int main()
    34 {
    35     int t;
    36     scanf("%d",&t);
    37     while(t--){
    38         int n,m;
    39         scanf("%d%d",&n,&m);
    40         init(n);
    41         int a,b;
    42         for(int i=1;i<=m;i++){
    43             scanf("%s%d%d",str,&a,&b);
    44             int fa = find(a);
    45             int fb = find(b);
    46             if(str[0]=='A'){
    47                 if(fa==fb){
    48                     printf("In the same gang.
    ");
    49                 }
    50                 else if(fa==find(opp[fb]))//如果fa!=fb  但是fa和b的敌人的祖先相同,那么a,b。不同族群
    51                     printf("In different gangs.
    ");
    52                 else
    53                     printf("Not sure yet.
    ");
    54             }
    55             else{
    56                 if(opp[a]==0)
    57                     opp[a] = fb;
    58                 if(opp[b]==0)
    59                     opp[b]=fa;
    60                 unin(a,opp[fb]);//合并
    61                 unin(b,opp[fa]);
    62             }
    63         }
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    Linux忘了root的密码怎么办
    缩略图的实现
    ASP.NET程序编写注意 (转载)
    太极拳
    Linux系统管理技巧大荟萃
    茶经(转载)
    datagrid的显示控制
    太极功
    Linux下硬盘分区详解
    Tomcat4.0中文问题简单解决方法
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3236295.html
Copyright © 2011-2022 走看看