bzoj5038 四叶草魔杖
很有意思的最小生成树啊。
网上的题解大多是状压+最小生成树,经过我的试验,其实只要把每个联通块找出来,一个个做一次就可以了。
放一个状压的。懒得再写一个搜索找联通块
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n,m;
struct edge{int x,y,d;}e[];
bool cmp(edge e1,edge e2){return e1.d<e2.d;}
int fa[];
int findfa(int x)
{
if(fa[x]==x)return x;
fa[x]=findfa(fa[x]);return findfa(fa[x]);
}
int kruscal(int zt)
{
int cnt=;
for(int i=;i<=n;i++)
if(zt&(<<i-))fa[i]=i,cnt++;
if(cnt==)return ; int ans=;
for(int i=;i<=m;i++)
if((zt&(<<e[i].x-))&&(zt&(<<e[i].y-)))
{
int fx=findfa(e[i].x),fy=findfa(e[i].y);
if(fx!=fy)
{
fa[fx]=fy;
ans+=e[i].d;
cnt--;if(cnt==)return ans;
}
}
return (<<);
}
int c[],sum[],f[];
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&c[i]);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].d),e[i].x++,e[i].y++;
if(e[i].x==e[i].y)i--,m--;
}
sort(e+,e+m+,cmp); int maxp=(<<n)-;
for(int zt=;zt<=maxp;zt++)
{
sum[zt]=;
for(int i=;i<=n;i++)
if(zt&(<<(i-)))sum[zt]+=c[i];
if(sum[zt]==)f[zt]=kruscal(zt);
}
for(int zt1=;zt1<=maxp;zt1++) if(sum[zt1]==&&f[zt1]!=(<<))
for(int zt2=zt1+;zt2<=maxp;zt2++) if(sum[zt2]==&&f[zt2]!=(<<))
if((!(zt1&zt2)))
f[zt1|zt2]=min(f[zt1|zt2],f[zt1]+f[zt2]); if(sum[maxp]!=||f[maxp]==(<<))printf("Impossible\n");
else printf("%d\n",f[maxp]);
return ;
}
bzoj5038 四叶草魔杖的更多相关文章
- BZOJ_3058_四叶草魔杖_kruscal+状压DP
BZOJ_3058_四叶草魔杖_kruscal+状压DP Description 魔杖护法Freda融合了四件武器,于是魔杖顶端缓缓地生出了一棵四叶草,四片叶子幻发着淡淡的七色光.圣剑护法rainbo ...
- [tyvj2054] 四叶草魔杖 (最小生成树 状压dp)
传送门 Background 陶醉在彩虹光芒笼罩的美景之中,探险队员们不知不觉已经穿过了七色虹,到达了目的地,面前出现了一座城堡和小溪田园,城堡前的木牌上写着"Poetic Island&q ...
- BZOJ3058 四叶草魔杖
Poetize11的T3 蒟蒻非常欢脱的写完了费用流,发现...边的cost竟然只算一次!!! 然后就跪了... Orz题解:"类型:Floyd传递闭包+最小生成树+状态压缩动态规划首先Fl ...
- BZOJ.3058.四叶草魔杖(Kruskal 状压DP)
题目链接 \(2^{16}=65536\),可以想到状压DP.但是又有\(\sum A_i\neq 0\)的问题.. 但是\(2^n\)这么小,完全可以枚举所有子集找到\(\sum A_i=0\)的, ...
- tyvj 2054 [Nescafé29]四叶草魔杖——最小生成树+状压dp
题目:http://www.joyoi.cn/problem/tyvj-2054 枚举点集,如果其和为0,则作为一个独立的块求一下最小生成树.因为它可以不和别的块连边. 然后状压dp即可. 别忘了判断 ...
- tyvj 2054 [Nescafé29]四叶草魔杖【克鲁斯卡尔+状压dp】
传送:http://www.joyoi.cn/problem/tyvj-2054 来自lyd课件: 所以先预处理出各个sum为0的块,然后状压dfs取min来得到答案 #include<iost ...
- tyvj2054 四叶草魔杖——连通块 & 状压DP
题目:http://www.joyoi.cn/problem/tyvj-2054 把点分成几个连通块,和为0的几个点放在一块,在块内跑最小生成树作为这个块的代价: 然后状压DP,组成全集的最小代价就是 ...
- [tyvj-2054][Nescafé29]四叶草魔杖 费用流
lyd讲的最小生成树的题. 道理我都懂,费用流多好写,又好调.但和一般费用流不一样的就是它走过一次后费用需调成0,但是再等回流,就恢复原状即可. #include <queue> #inc ...
- NOIP系列复习及题目集合
首先是我的酱油记了啦~: Xs的NOIP2014酱油记,持续更新中 知识点方面: noip知识点总结之--贪心 noip知识点总结之--线性筛法及其拓展 noip知识点总结之--欧几里得算法和扩展欧几 ...
随机推荐
- nodejs全局安装路径的位置
一般nodejs安装在默认的C盘,如果不知道安装在哪里,可以打开控制面板-系统和安全-系统-高级配置中找到 所谓全局安装: 是指安装在node中node_module的根目录里,可以在电脑的任何位置调 ...
- Python元类(metaclass)以及元类实现单例模式
这里将一篇写的非常好的文章基本照搬过来吧,这是一篇在Stack overflow上很热的帖子,我看http://blog.jobbole.com/21351/这篇博客对其进行了翻译. 一.理解类也是对 ...
- ajax请求参数的格式
因为多写了一个contentType=“text/html”,请求的时候,参数总是转成了url&拼接的格式,导致请求不成功,调试了老半天 这个也是奇怪,为什么post只能接收json格式的数据 ...
- PHP 之ip查询接口
/** * @param $ip 待查询的ip * @return mixed */ function getIpAddressInfo($ip) { $ipurl = 'http://api.ip1 ...
- anguar相关
1.创建组件 在某目录下创建组件 ng g c content/membersManage 2.创建服务 在某目录下创建服务 ng g service services/storage 2.创建模 ...
- 一个ROS的服务,使机器人向前移动指定距离
源代码有点长,放文末链接里了. 服务描述及代码现在的服务是:请求时携带要前进的距离,然后底盘前进相应距离.代码如下,改动很小: #!/usr/bin/env python import rospyfr ...
- C# DataTable扩展方法
在日常搬砖中,总结了一些简单的扩展方法. public static bool IsNullOrEmpty(this DataTable dt) { ; } public static bool Is ...
- webpack-dev-middleware 与 webpack-hot-middlware
dev-middleware: live reload的实现: 思考一下我們要如何更新(live reload)呢? 當然是需要取得 webpack 編好的資料啊,於是就需要在從 request 到 ...
- Problem 21
Problem 21 https://projecteuler.net/problem=21 Let d(n) be defined as the sum of proper divisors of ...
- dubbo服务telnet命令的使用
转自:https://www.cnblogs.com/feiqihang/p/4387330.html dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.Dubbo2.0.5以上版本 ...