[题解]小X的液体混合
版权说明:来自 石门ss学校 Guohao OJ ,禁止转载
题目描述
虽然小X不喜欢化学原理,但他特别喜欢把一大堆液体倒在一起。
现在小X有n种液体,其中m对会发生反应。现在他想把这n种液体按某种顺序倒入一个容器内,让他获得最刺激的体验,也就是使危险系数尽量大。
我们可以这样计算危险系数,一开始容器内没有任何液体,危险系数为1。每次液体倒入容器时,若容器内已有一种或多种液体会与这种液体发生反应,则危险系数会乘2,否则危险系数不变。
最大危险系数小X不会算,希望你帮帮他。
输入输出格式
输入格式:
第一行包含两个整数n,m。
接下来m行,每行包含两个整数a,b,表示液体a和液体b会发生反应。
输出格式:
一行,包含一个整数,表示最大危险系数。
输入输出样例
3 2
1 2
2 3
4
说明
数据规模:
对于30%的数据,n≤10;
对于100%的数据,1≤n≤1000,a≠b,同种反应不会出现多次。
题目分析:
通过题目可以发现,不用管放置的顺序,我们就可以轻而易举得想到并查集,将液体合并为后,一个集的危险指数就为 2 的 (集合内个数-1) ,最后将所有集合值加起来就是答案。
代码
#include<iostream>
#include<fstream>
using namespace std;
typedef string str;
const int Max_N=1e3+;
int n,m;
int Fa[Max_N],tot[Max_N];
string mul(string s1,string s2)
{
// 一连串的高精度乘法,个人码风问题不建议借鉴
// 最好自己手写一个
#define len1 (s1.size())
#define len2 (s2.size())
int maxx=max(len1,len2);
register int i,j,k,l;
int Ans[maxx<<|];
for(i=;i<=(maxx<<);i++)Ans[i]=;
for(i=;i<len1;i++)s1[i]-='';
for(i=;i<len2;i++)s2[i]-='';
for(i=len1-,k=;i>=;i--,k++){
for(j=len2-,l=(maxx<<)-k;j>=;j--,l--)
Ans[l]+=(int)s1[i]*s2[j];
}
for(i=(maxx<<);i>=;i--)
if(Ans[i]>){
int xy=Ans[i]/;
Ans[i-]+=xy;
Ans[i]%=;
}
int top=;
while(Ans[top]==&&top^(maxx<<))top++;
string res;
for(i=top;i<=maxx<<;i++)res+=Ans[i]+'';
return res;
}
int Find(int p)
{
// 查询祖先
if(Fa[p]==p)
return p;
return Fa[p]=Find(Fa[p]);
}
void megre(int u,int v)
{
Fa[Find(u)]=Fa[Find(v)];
return ;
}
str Pow(str b,int p)
{
// 字符串版快速幂:-D
if(!p)
return "";
str res="";
while(p){
if(p&)
res=mul(res,b);
b=mul(b,b);
p>>=;
}
return res;
}
int main()
{
scanf("%d%d",&n,&m);
int u,v;
register int i,j;
for(i=;i<=n;i++)
Fa[i]=i;
for(i=;i<=m;i++){
scanf("%d%d",&u,&v);
megre(u,v);//²¢²é¼¯ºÏ²¢²Ù×÷
}
for(i=;i<=n;i++)
tot[Find(i)]++;//统计集合内个数
str res="";
for(i=;i<=n;i++)
if(tot[i]>)
res=mul(res,Pow("",tot[i]-));
// 答案为集合内的 pow(2,(集合内个数-1)) 的和
cout<<res;
return ;
}
代码
写在最后的话:
题解仅供思路,要想成为 dalao ,请学会并尽量会做到教他人甚至自己写题解。
博主(目前)是一名初二蒟蒻,如有问题还请大家指出,一起交流学习!
Happy every day! ——2019.4.11
[题解]小X的液体混合的更多相关文章
- [洛谷P1373][题解]小a和uim之大逃离
(别点我我不是题目) 这道题可以很容易看出是一道dp(因为是在dp关卡里找的) 稍微想一下就可以yy出一个不错的状态: f[i][j][k][0/1]代表走到了点(i,j).膜液量相差k(小a-uim ...
- 题解 P1208 【[USACO1.3]混合牛奶 Mixing Milk】
其实根本没有一楼dalao描述的那么麻烦...... 一楼dalao其实吧,采用了一种纯属模拟的方式. 下面是我的大跃进思想 但是一个个地做减法是不是太慢了?(大跃进思想) 于是我们是不是可以直接进行 ...
- 小程序 less wxss 混合 Mixins picker样式优化 箭头样式的实现原理
lessc src/style/picker-arrow_.less src/style/picker-arrow_.wxss 快速入门 | Less.js 中文文档 https://less.boo ...
- Gorgeous Sequence 题解 (小清新线段树)
这道题被学长称为“科幻题” 题面 事实上,并不是做法科幻,而是“为什么能这么做?”的解释非常科幻 换句话说,复杂度分析灰常诡异以至于吉如一大佬当场吃书 线段树维护的量:区间和sum,区间最大值max1 ...
- [洛谷P4942][题解]小凯的数字
这题打着高精的旗号其实是闹着玩的……(我不是题目) 数据范围就是提示你这题O(1)的 我们知道,一个数膜9的余数等于它数字和膜9的余数 我们可以把l到r加起来然后膜9 也就是(l+r)(r-l+1)/ ...
- 题解 小B的询问
题面 解析 这就是道莫队模板啊啊!! 因此,似乎并没有什么好讲的. 莫队算法传送门 我们只需要将询问存下来, 离线处理就行了. 还是上代码吧: #include<bits/stdc++.h> ...
- 【题解】Luogu2915 [USACO08NOV]奶牛混合起来Mixed Up Cows
题目描述 Each of Farmer John's N (4 <= N <= 16) cows has a unique serial number S_i (1 <= S_i & ...
- Hybrid小程序混合开发之路 - 数据交互
HTML+CSS是历史悠久.超高自由度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中 ...
- SASS详解之混合(mixins)
SASS详解之混合(mixins)可以出现在SASS的任何地方.有很多类名具有相同或者相似的样式,就可以用SASS中的混合(mixins)来进行编写,然后针对不同类名的不同样式逐一编写. 定义一个混合 ...
随机推荐
- WKWebView讲解与使用
随着IOS开发的应用,对于网页嵌入也越来越多了,在IOS 8之前我们使用UIWebView展示详情页,自从IOS 8之后就出现了WKWebView,相比UIWebView,WKWebView优化了较多 ...
- sql字符串分割扩展方法
可编程性—表值函数 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[Split] ( @RowData ...
- js 获取上传视频的时长、大小、后缀名
参考资料:获取时长 var fileName = $("#sectionfileUpload").val(); //C:\fakepath\3.jpeg var exts = fi ...
- 软件开发:网站&视频&书籍&文章推荐(不断更新)
利用书籍进行系统学习,凭借博客/新闻等资料开阔眼界,辅之以代码及项目实战,并勤加以总结,方可进步. 常用网站: 找英文电子书网站:gen.lib.rus.ec 和 www.jiumodiary.com ...
- Java 平台无关性的基石
Java 在刚刚诞生之初就提出过一个非常著名的口号:"一次编写,到处运行", 这句话充分表达了软件开发人员对冲破平台界限的渴望 在竞争激烈的 IT 领域,各种不同的硬件体系结构和不 ...
- javascript面向对象习题答案
第二章 1.如果我们在控制台中执行下列语句,结果分别是什么?为什么? var a; typeof a; undefined > var s = '1s'; s++; NaN > !!&qu ...
- 【设计模式】建造者模式 Builder Pattern
前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...
- SQLServer之多表联合查询
多表联合查询简介 定义:连接查询是关系型数据库最主要的查询,通过连接运算符可以实现多个表连接数据查询. 分类:内连接,外连接,全外连接. 内连接 定义 内联接使用比较运算符根据每个表的通用列中的值匹配 ...
- Ubuntu通过apt-get安装指定版本和查询软件源有多少个版本
一.通过apt-get安装指定版本 apt-get install <<package name>>=<<version>> 二.查询指定软件有多少个版 ...
- 网页控制脚本修改系统信息 C语言调用uci
0 交叉编译生成程序 http://tuntuntun.net/%E5%9C%A8OpenWrt%E4%B8%8A%E8%BF%90%E8%A1%8C%E7%AC%AC%E4%B8%80%E4%B8% ...