$ \color{#0066ff}{ 题目描述 }$

俗话说种瓜得瓜,种豆得豆,MloVtry把自己砍掉一半埋进了土里,于是它得到了一颗n个点的咸鱼树。

但是问题是由于MloVtry只舍得埋下一半的自己,所以这个咸鱼树是不完整的---甚至它碎裂成了m条边。

作为一条能够致癌的咸鱼,MloVtry当然想要一颗咸鱼树来标榜自己的身份。

MloVtry大概估计出了连接两个点之间的代价,它想知道,最少需要多少代价才能拼出咸鱼树?

值得注意的是,咸鱼树上的咸鱼边们对于MloVtry是很有意见的,所以每条边都会制定一个点集S,只有MloVtry将S这个特殊点集里的所有点都接入某个集合T之后,这条边才可以被加入T这个集合。

MloVtry把脑子埋进了地里,所以这个问题只能由你来解决了。

\(\color{#0066ff}{输入格式}\)

第一行2个整数n、m

接下来m行,每行4个整数u,v,S,l,表示一条连接u到v的长为l的双向边,要在已经选择了点集S(这个集合用二进制数来表示,1号点对应第1位,其余点同理)之后才能选择。

\(\color{#0066ff}{输出格式}\)

一行1个整数,表示最小代价。当然,可能存在无解的情况,此时请输出-1。

\(\color{#0066ff}{输入样例}\)

2 7
1 2 1 14
2 1 2 11
2 2 1 18
2 1 2 16
2 1 2 12
2 1 2 16
2 1 3 13

\(\color{#0066ff}{输出样例}\)

11

\(\color{#0066ff}{数据范围与提示}\)

N<=15,m<=n*(n+10)。

数据保证所有数值在int范围内。

\(\color{#0066ff}{题解}\)

完美的被题意杀。。。

题目的意思其实是告诉你对于两个状态怎么转移

所以直接状压+最短路就行了

#include<bits/stdc++.h>
#define LL long long
LL in() {
char ch; LL x = 0, f = 1;
while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));
return x * f;
}
int n, m;
const int maxn = 1005050;
const int inf = 0x7fffffff;
using std::pair;
using std::make_pair;
std::priority_queue<pair<int, int>, std::vector<pair<int, int> >, std::greater<pair<int, int> > > q;
struct node {
int x, y, zt, val;
}e[maxn];
int dis[maxn];
bool vis[maxn];
int main() {
n = in(), m = in();
for(int i = 0; i < (1 << n); i++) dis[i] = inf;
for(int i = 1; i <= m; i++) {
e[i].x = in(), e[i].y = in(), e[i].zt = in(), e[i].val = in();
}
for(int i = 1; i <= n; i++) {
dis[1 << (i - 1)] = 0;
q.push(make_pair(dis[1 << (i - 1)], 1 << (i - 1)));
}
while(!q.empty()) {
int zt = q.top().second; q.pop();
if(vis[zt]) continue;
vis[zt] = true;
for(int i = 1; i <= m; i++) {
int x = e[i].x, y = e[i].y, now = e[i].zt, val = e[i].val;
if((now | zt) != zt) continue;
int a = (zt >> (x - 1)) & 1;
int b = (zt >> (y - 1)) & 1;
if(!a && !b) continue;
int newzt = zt | (1 << (x - 1)) | (1 << (y - 1));
if(dis[newzt] > dis[zt] + val) q.push(make_pair(dis[newzt] = dis[zt] + val, newzt));
}
}
printf("%d\n", dis[(1 << n) - 1] == inf? -1 : dis[(1 << n) - 1]);
return 0;
}

P4854 MloVtry的咸鱼树 状压+最短路的更多相关文章

  1. 【bzoj4006】[JLOI2015]管道连接 斯坦纳树+状压dp

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向图和 $p$ 个特殊点,每个特殊点有一个颜色.要求选出若干条边,使得颜色相同的特殊点在同一个连通块内.输出最小边权和. 输入 第一行包含三个整数 n ...

  2. bzoj 4006 [JLOI2015]管道连接(斯坦纳树+状压DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4006 [题意] 给定n点m边的图,连接边(u,v)需要花费w,问满足使k个点中同颜色的 ...

  3. 51nod 1673 树有几多愁——虚树+状压DP

    题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1673 建一个虚树. 一种贪心的想法是把较小的值填到叶子上,这样一个小值限制到的 ...

  4. hdu 5023 线段树+状压

    http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...

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

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

  6. bzoj 4006 管道连接 —— 斯坦纳树+状压DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4006 用斯坦纳树求出所有关键点的各种连通情况的代价,把这个作为状压(压的是集合选择情况)的初 ...

  7. POJ:2777-Count Color(线段树+状压)

    Count Color Time Limit: 1000MS Memory Limit: 65536K Description Chosen Problem Solving and Program d ...

  8. 刷题总结——树有几多愁(51nod1673 虚树+状压dp+贪心)

    题目: lyk有一棵树,它想给这棵树重标号. 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号. 这棵树的烦恼值为所有叶子节点的值的乘积. lyk想让这棵树的烦恼值最大,你只需输 ...

  9. POJ 3468 线段树+状压

    题意:给你n个数,有对区间的加减操作,问某个区间的和是多少. 思路:状压+线段树(要用lazy标记,否则会TLE) //By SiriusRen #include <cstdio> #in ...

随机推荐

  1. C#带百分比的进度条

    功能需求: 如果程序中会执行一个耗时的计算过程,我想在用户点击按钮后,弹出一个进度条窗口,显示正在执行的进度(最好能带有百分比),执行完成后,进度条窗口关闭,回到主程序窗口. 在关闭子窗口之前父窗体不 ...

  2. bash&nbsp;shell笔记3&nbsp;结构化命令二

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/513601 三 ...

  3. 敏捷软件开发Note

    [敏捷原则] 1.我们最优先要做的是通过尽早的.持续的交付有价值的软件为使客户满意. 初期交付的系统中所包含的功能越少,最终交付的系统的质量就越高.交付的越频繁,最终的产品质量就越高.敏捷实践会说早地 ...

  4. rdlc设置指定列隐藏

    此用户帐户对提案名称列不可见

  5. linux 目录和用户权限命令

    1.linux 修改文件目录所有者 例:要将当前目录下名 title 的文件夹及其子文件的所有者改为geust组的su用户,方法如下: #chown -R su.geust title -R 递归式地 ...

  6. PhoneGap 3.4 开发配置及问题

    PhoneGap这个坑爹货,开发确实迅速,又无需学习新知识,但又有N多深不见底坑,最大的坑无疑是性能,滑动时卡顿明显,iPhone5上性能比较好,大部分安卓上就坑爹了,神马动画效果最好少用:其次是不同 ...

  7. 一个可用模板的Xml描述

    <?xml version="1.0" encoding="utf-8"?> <VMTEMPLATE> <ID>48< ...

  8. 面试题:HTTP必知必会——常见面试题总结 背1

    1.常用的HTTP方法有哪些?GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST ...

  9. ls -al

    ls -al:显示当前文件下所有的文件

  10. Tomcat 与 数据库连接池 的小坑

    连接池的优点众所周知. 我们可以自己实现数据库连接池,也可引入实现数据库连接池的jar包,按要求进行配置后直接使用. 关于这方面的资料,好多dalao博客上记录的都是旧版本Tomcat的配置方式,很可 ...