10月28日 小X的液体混合

题目

     

分析

     正解是并查集+高精

      枚举加高精就好了

 

代码

    

 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 bool map[1001][1001],flag[1001];
 5 int ans[1001];
 6 queue <int> q;
 7 int main ()
 8 {
 9     int n,m;
10     cin>>n>>m;
11     int a,b;
12     for (int i=1;i<=m;i++)
13     {
14         cin>>a>>b;
15         map[a][b]=1;
16         map[b][a]=1;
17         
18     }
19     ans[1000]=1;
20     for (int j=1;j<=n;j++)
21     {
22         if (flag[j]==0)
23         {
24             q.push(j);
25             flag[j]=1;
26         }
27         while (!q.empty())
28         {
29             int k=q.front();
30             q.pop();
31             for (int i=1;i<=n;i++)
32             {
33               if (map[k][i]==1&&flag[i]==0)
34               {
35                 int tt=0;
36                 for (int ii=1000;ii>=1;ii--)
37                 {
38                   ans[ii]=ans[ii]*2+tt;
39                   tt=ans[ii]/10;
40                   ans[ii]%=10;    
41                 }
42                 q.push(i);
43                 flag[i]=1;
44               }
45                 
46             }
47         }
48        }
49      int j=1;
50     while (ans[j]==0) j++;
51     for (int i=j;i<=1000;i++)
52       cout<<ans[i];
53 }
为何要逼自己长大,去闯不该闯的荒唐
原文地址:https://www.cnblogs.com/zjzjzj/p/9861159.html