zoukankan      html  css  js  c++  java
  • hdu 3461 Code Lock 并查集(有点难想到)★★

     1 #include<stdio.h>
     2 #include<math.h>
     3 int set[10000005];
     4 int count;
     5 #define mod 1000000007
     6 
     7 int find(int x)
     8 {
     9     int r=x;
    10     while(r!=set[r])
    11     r=set[r];
    12     int i=x;
    13     while(i!=r)
    14     {
    15         int j=set[i];
    16         set[i]=r;
    17         i=j;
    18     }
    19     return r;
    20 }
    21 
    22 void merge(int x,int y)
    23 {
    24     int fx=find(x);
    25     int fy=find(y);
    26     if(fx!=fy)
    27     {
    28         set[fx]=fy;
    29         count++;
    30     }
    31 }
    32 
    33 long long exp(int n){
    34     long long sum=1, tmp=26;
    35     while(n){
    36         if(n&1) //n%2==1
    37         {
    38             sum = sum*tmp;
    39             sum %= mod;
    40         }
    41         tmp = (tmp*tmp)%mod;
    42         n>>=1;  //  n/=2;
    43     }
    44     return sum;
    45 }
    46 
    47 int main()
    48 {
    49     int n,m,l,r;
    50     while(scanf("%d%d",&n,&m)!=EOF)
    51     {
    52         count=0;
    53         for(int i=0;i<=n;i++)//i=0,错在i=1
    54         set[i]=i;
    55         for(int i=1;i<=m;i++)
    56         {
    57             scanf("%d%d",&l,&r);
    58             merge(l-1,r);//若果是l-1,上边初始化就从0开始,如果用merge(l,r+1),初始化i是1到n+1
    59         }
    60         printf("%lld
    ",exp(n-count)%mod);
    61     }
    62     return 0;
    63 }
  • 相关阅读:
    Android中ProgressBar显示小数的方法
    Android屏幕适配-安卓切图
    android -services
    Java 位移运算符
    异常、集合、数据结构
    常用类
    编码
    String类
    Android-1
    ButterKnife注解式绑定控件
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/7683860.html
Copyright © 2011-2022 走看看