题目: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. springboot-FilterRegistrationBean

    主要用来对servlet filter进行自定义,比如设置order. 先写一个普通的filter: public class FilterDemo implements Filter { priva ...

  2. 基于IG的特征评分方法

    本文简单介绍了熵.信息增益的概念,以及如何使用信息增益对监督学习的训练样本进行评估,评估每个字段的信息量. 1.熵的介绍       在信息论里面,熵是对不确定性的测量.通俗来讲,熵就是衡量随机变量随 ...

  3. 【Tech】POI标签分类

    寒假老板给的任务,让我重现这个实验http://www.liuhaihua.cn/archives/15565.html.自己就随便试了下,用的都是比较经典(lao)的算法和知识,记录一下. 一.从网 ...

  4. P3794 签到题IV

    题目 P3794 签到题IV 来切道水题放松一下吧 做法 或是单调不下降的,\(gcd\)是单调不上升的 \(a_i≤5×10^5\)分成权值不同的块数应该很小,所以随便乱搞就出来了 My compl ...

  5. Ubuntu 配置NTP Server

    Ubuntu安装NTP Server很简单,分位3步走: 第一步:安装NTP root@cephadmin:~/ceph-cluster# apt-get install ntp Reading pa ...

  6. java instrumentation &JVMTI

    Java Instrumentation (参考:http://www.ibm.com/developerworks/cn/java/j-lo-jse61/) 简介: 使用Instrumentatio ...

  7. javax.servlet.jsp.JspException cannot be resolved to a type 和 javax.servlet.jsp.PageContext cannot be resolved to a type 解决办法

    今天我从码云上拉一个项目下来,是个maven项目,闲来无事自己研究研究,发现刚拉下来,项目就有报错,我一看是httpServletRequest cannot be resolved to a typ ...

  8. spring配置hibernate映射文件-------通配符

    <!-- 这里一定要注意是使用spring的mappingLocations属性进行通配的 -->      <property name="mappingLocation ...

  9. Shell中数学计算/运算

    shell中的赋值和操作默认都是字符串处理. 1)使用let(只能进行整数运算)var=1let "var+=1"echo $var输出结果为2 注意:a)let几乎支持所有的运算 ...

  10. 【codevs2011】最小距离之和 [LNOI2013](Floyd)

    题目网址:http://codevs.cn/problem/2011/ 题目大意:有一个图,每次删一条边(可以重复删),求每次删边之后所有点对的最短距离之和. 看了一眼题目,顿时发现了O(n^4)的暴 ...