雖然小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**題解僅供思路,要想成為 dalao ,請學會並盡量會做到教他人甚至自己寫題解。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 }
博主(目前)是一名初二蒟蒻,如有問題還請大家指出,一起交流學習!
小 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,...