hdu 3461 Code Lock

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<string>
 6 #include<queue>
 7 #include<algorithm>
 8 #include<map>
 9 #include<iomanip>
10 #include<climits>
11 #include<string.h>
12 #include<numeric>
13 #include<cmath>
14 #include<stdlib.h>
15 #include<vector>
16 #include<stack>
17 #include<set>
18 #define FOR(x, b, e)  for(int x=b;x<=(e);x++)
19 #define REP(x, n)     for(int x=0;x<(n);x++)
20 #define MAXN 100010
21 #define maxn 1000010
22 #define Mod 1000007
23 #define N 1010
24 using namespace std;
25 typedef long long LL;
26 
27 int n, m;
28 int fa[10000010];
29 int cnt;
30 
31 int findset(int x)
32 {
33     return fa[x] = fa[x] == x? x:findset(fa[x]);
34 }
35 
36 void merge(int a, int b)
37 {
38     int x = findset(a);
39     int y = findset(b);
40     if (x != y) {
41         fa[x] = y;
42         cnt++;
43     }
44 }
45 
46 LL quick_pow(int n) 
47 {
48     LL tmp = 26,sum = 1;
49     while (n) {
50         if (n & 1) sum = (sum * tmp) % 1000000007; 
51         tmp = (tmp * tmp) % 1000000007;
52         n >>= 1;
53     }
54     return sum % 1000000007;
55 }
56 
57 int main()
58 {
59     int l, r;
60     while (cin >> n >> m) {    
61         cnt = 0;
62         FOR(i,0,n) fa[i] = i;
63         FOR(i,1,m) {
64             cin >> l >> r;
65             merge(l-1,r);
66         }
67         cout << quick_pow(n - cnt) << endl;
68     }
69     return 0;
70 }

 

posted @ 2015-03-30 17:36  UsedRose  阅读(151)  评论(0编辑  收藏  举报