題解 小X的液體混合

2022-07-30 04:21:08 字數 1731 閱讀 8276

雖然小x不喜歡化學原理,但他特別喜歡把一大堆液體倒在一起。

現在小x有n種液體,其中m對會發生反應。現在他想把這n種液體按某種順序倒入乙個容器內,讓他獲得最刺激的體驗,也就是使危險係數盡量大。

我們可以這樣計算危險係數,一開始容器內沒有任何液體,危險係數為1。每次液體倒入容器時,若容器內已有一種或多種液體會與這種液體發生反應,則危險係數會乘2,否則危險係數不變。

最大危險係數小x不會算,希望你幫幫他。

輸入格式:

第一行包含兩個整數n,m。

接下來m行,每行包含兩個整數a,b,表示液體a和液體b會發生反應。

輸出格式:

一行,包含乙個整數,表示最大危險係數。

輸入樣例:

3 2

1 22 3

輸出樣例:

4
資料規模:

對於30%的資料,n≤10;

對於100%的資料,1≤n≤1000,a≠b,同種反應不會出現多次。

通過題目可以發現,不用管放置的順序,我們就可以輕而易舉得想到並查集,將液體合併為後,乙個集的危險指數就為  2 的 (集合內個數-1) ,最後將所有集合值加起來就是答案。

1 #include2 #include3

using

namespace

std;

4 typedef string

str;

5const

int max_n=1e3+5;6

intn,m;

7int

fa[max_n],tot[max_n];

8string mul(string s1,string

s2)9

24for(i=(maxx<<1);i>=0;i--)

25if(ans[i]>9)30

int top=0;31

while(ans[top]==0&&top^(maxx<<1))top++;

32string

res;

33for(i=top;i<=maxx<<1;i++)res+=ans[i]+'0'

;34return

res;35}

36int find(int

p)37

43void megre(int u,int

v)44

48 str pow(str b,int

p)49

60return

res;61}

62int

main()

63

73for(i=1;i<=n;i++)

74 tot[find(i)]++;//

統計集合內個數

75 str res="1"

;76for(i=1;i<=n;i++)

77if(tot[i]>1

)78 res=mul(res,pow("

2",tot[i]-1

));79

//答案為集合內的 pow(2,(集合內個數-1)) 的和

80 cout<

81return0;

82 }

**題解僅供思路,要想成為 dalao ,請學會並盡量會做到教他人甚至自己寫題解。

博主(目前)是一名初二蒟蒻,如有問題還請大家指出,一起交流學習!

小 X 的液體混合

example mixture.in 3 21 2 2 3mixture.out 4scoring 對於 30 的資料,n 10。對於 100 的資料,1 n 1000,a b,同種反應不會出現多次。輸入的一張圖可能有多個不同的連通塊,而每個不同的連通塊之間互不影響,且每個 不同連通塊中加入的第一種...

小X的液體混合 並查集 高精乘

我們可以發現,乙個連通圖中只有第乙個放進去的是無法產生貢獻的,而其他都是可以把危險係數乘2 22的。所以我們就只要判斷有多少個連通圖,這也就說明,有x xx個點是不能產生貢獻。那麼剩餘的n x n xn x連通圖個數的點都是可以讓答案乘2 22的。那麼就用並查集判斷連通圖個數,然後再高精乘即可。in...

10 14 校內測 小x的密碼破譯 題解

這天小 y yy 有事外出,小 x xx 又忘記帶電腦了,於是想使用小 y yy 的電腦。不幸的是,小 y yy 設了密碼,密碼提示是四個整數,且輸錯後密碼和提示就會重新生成。正當小 x xx 一籌莫展的時候,他開啟小 y yy 的抽屜,發現裡面有一張小紙條,上面寫著 給出提示 n nn,a aa,...