题目:http://www.joyoi.cn/problem/tyvj-2054

枚举点集,如果其和为0,则作为一个独立的块求一下最小生成树。因为它可以不和别的块连边。

然后状压dp即可。

别忘了判断该块能不能连通。

别忘了判断无解!(0x3f 真好用)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=N*(N-)/,Lm=(<<)+;
int n,m,a[N],hd[N],c[Lm],lm,v[Lm],cnt,dp[Lm],fa[N];
bool vis[Lm];
struct Ed{
int x,y,w;
Ed(int x=,int y=,int w=):x(x),y(y),w(w) {}
}ed[M];
bool cmp(Ed x,Ed y){return x.w<y.w;}
int find(int a){return fa[a]==a?a:fa[a]=find(fa[a]);}
void kruscal(int s,int &k)
{
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=m;i++)
{
int x=ed[i].x,y=ed[i].y;
if(((<<(x-))&s)&&((<<(y-))&s)&&find(x)!=find(y))
{
fa[(find(x))]=find(y);c[k]+=ed[i].w;
}
}
int tf=;
for(int i=;i<n;i++)
if((<<i)&s)
{
if(!tf)tf=find(i+);
else if(find(i+)!=tf){v[k]=c[k]=;k--;return;}
}
}
void init()
{
sort(ed+,ed+m+,cmp);
for(int s=;s<lm;s++)
{
int sum=;
for(int j=;j<n;j++) if((<<j)&s) sum+=a[j+];
if(sum)continue;
v[++cnt]=s;kruscal(s,cnt);
}
}
void dfs(int s)
{
if(vis[s])return;vis[s]=;
for(int i=;i<=cnt;i++)
if((s&v[i])==v[i])
{
dfs(s-v[i]);dp[s]=min(dp[s],dp[s-v[i]]+c[i]);
}
}
int main()
{
scanf("%d%d",&n,&m);int x,y,z;lm=(<<n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
ed[i]=Ed(x+,y+,z);
}
init();
memset(dp,0x3f,sizeof dp);dp[]=;
dfs(lm-);
if(dp[lm-]==0x3f3f3f3f)printf("Impossible");
else printf("%d",dp[lm-]);
return ;
}

tyvj 2054 [Nescafé29]四叶草魔杖——最小生成树+状压dp的更多相关文章

  1. [tyvj2054] 四叶草魔杖 (最小生成树 状压dp)

    传送门 Background 陶醉在彩虹光芒笼罩的美景之中,探险队员们不知不觉已经穿过了七色虹,到达了目的地,面前出现了一座城堡和小溪田园,城堡前的木牌上写着"Poetic Island&q ...

  2. BZOJ_3058_四叶草魔杖_kruscal+状压DP

    BZOJ_3058_四叶草魔杖_kruscal+状压DP Description 魔杖护法Freda融合了四件武器,于是魔杖顶端缓缓地生出了一棵四叶草,四片叶子幻发着淡淡的七色光.圣剑护法rainbo ...

  3. BZOJ.3058.四叶草魔杖(Kruskal 状压DP)

    题目链接 \(2^{16}=65536\),可以想到状压DP.但是又有\(\sum A_i\neq 0\)的问题.. 但是\(2^n\)这么小,完全可以枚举所有子集找到\(\sum A_i=0\)的, ...

  4. tyvj 2054 [Nescafé29]四叶草魔杖【克鲁斯卡尔+状压dp】

    传送:http://www.joyoi.cn/problem/tyvj-2054 来自lyd课件: 所以先预处理出各个sum为0的块,然后状压dfs取min来得到答案 #include<iost ...

  5. tyvj2054 四叶草魔杖——连通块 & 状压DP

    题目:http://www.joyoi.cn/problem/tyvj-2054 把点分成几个连通块,和为0的几个点放在一块,在块内跑最小生成树作为这个块的代价: 然后状压DP,组成全集的最小代价就是 ...

  6. [WC2008]游览计划(状压dp)

    题面太鬼畜不粘了. 题意就是给一张n*m的网格图,每个点有点权,有k个关键点,让你把这k个关键点连成一个联通快的最小代价. 题解 这题nmk都非常小,解法肯定是状压,比较一般的解法插头dp,但不太好写 ...

  7. bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp

    给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\ ...

  8. luogu4294 [WC2008]游览计划(状压DP/斯坦纳树)

    link 题目大意:给定一个网格图,有些点是关键点,选择格点有代价,求把所有关键点联通的最小代价 斯坦纳树模板题 斯坦纳树问题:给定一个图结构,有一些点是关键点,求把这些关键点联通的最小代价e 斯坦纳 ...

  9. 【ZJOI2017 Round1练习&BZOJ4774】D3T2 road(斯坦纳树,状压DP)

    题意: 对于边带权的无向图 G = (V, E),请选择一些边, 使得1<=i<=d,i号节点和 n − i + 1 号节点可以通过选中的边连通, 最小化选中的所有边的权值和. d< ...

随机推荐

  1. I.MX6Q(TQIMX6Q/TQE9)学习笔记——内核启动与文件系统挂载

    经过前面的移植,u-boot已经有能力启动内核了,本文主要来看下如何通过之前移植的u-boot来启动内核.如果按照前面的文章完成了LTIB 的编译,那么,Linux的内核应该就会出现rpm/BUILD ...

  2. STM32 USB虚拟串口

    串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方 ...

  3. css transform常用变化解析

    本文旨在对常用变化做最直观的简析 translate 移动 translateX() X轴正方向移动(单位可为px,也可为%,为%时以自身为参照物) translateY() Y轴反方向移动 tran ...

  4. 斯坦福机器学习视频笔记 Week6 关于机器学习的建议 Advice for Applying Machine Learning

    我们将学习如何系统地提升机器学习算法,告诉你学习算法何时做得不好,并描述如何'调试'你的学习算法和提高其性能的“最佳实践”.要优化机器学习算法,需要先了解可以在哪里做最大的改进. 我们将讨论如何理解具 ...

  5. mysql基础(1)-基本操作

    数据库 数据库(Database,DB)是数据的集合,是一个长期存储在计算机内的.有组织的.有共享的.统一管理的数据集合. 存储数据 管理数据 数据库类型 关系型数据库:由二维表及其之间的联系组成的一 ...

  6. DataX的安装

    DataX的安装 1. 可下载tar包 https://github.com/alibaba/DataX/blob/master/userGuid.md 2. 下载源码自己编译 git clone h ...

  7. web.xml里报错:Multiple annotations found at this line:

    在web.xml 中添加错误页面配置,出现了这个报错 具体情况是这样的: 错误信息: Multiple annotations found at this line: - cvc-complex-ty ...

  8. linux下 stat statfs 获取 文件 磁盘 信息

    stat函数讲解 表头文件:    #include <sys/stat.h>              #include <unistd.h> 定义函数:    int st ...

  9. 微信内置浏览器http请求10秒内接收不到数据会自动重发第二遍请求

    微信内置浏览器http请求10秒内接收不到数据会自动重发第二遍请求     这是个坑

  10. review05

    子类与继承 所有类都是Object的子孙类. 子类继承了父类的成员变量和方法,就好像是在子类中直接定义了一样. 如果子类和父类在同一个包中,子类自然地继承了父类中不是private的成员变量和方法. ...