【状压DP】吃货JYY(luogu 6085)

正题

luogu 6085


题目大意

给你一个无向图,其中有一些边是必须走的,问你从1开始走,经过所有必须走的边,然后回到1的最短路径


解题思路

n很小,可以先用Floyd跑出两个点之间的最短路

然后状压DP,每个点存三种状态:
0.不在连通图内
1.在连通图内且连边为奇数
2.在连通图内且连边为偶数

遍历所有状态,每个状态找不在连通图内的点,然后和连通图内一点连边,然后记录奇偶性(必要的边不记录)

枚举完所有状态后,把必要的边加进里面,然后对于连边为奇数的,找到一种最小代价连接方式,这样可以构造一条回路


代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 1594323
using namespace std;
int n, m, k, x, y, z, p, MX, nec, sum, ans, tot, h[100], v[100], g[10000], deg[100], dis[100][100];
int f[N + 10];
queue<int>d;
struct rec
{int to, l, next;
}e[200];
void add(int x, int y, int z)
{e[++tot].to = y;e[tot].l = z;e[tot].next = h[x];h[x] = tot;
}
int main()
{memset(dis, 127/3, sizeof(dis));memset(g, 127/3, sizeof(g));memset(f, 127/3, sizeof(f));MX = g[0];scanf("%d%d", &n, &m);for (int i = 1; i <= m; ++i){scanf("%d%d%d", &x, &y, &z);x--;y--;add(x, y, z);add(y, x, z);dis[x][y] = dis[y][x] = min(dis[x][y], z);nec ^= (1<<x) ^ (1<<y);deg[x]++;deg[y]++;sum += z;}scanf("%d", &m);for (int i = 1; i <= m; ++i){scanf("%d%d%d", &x, &y, &z);x--;y--;dis[x][y] = dis[y][x] = min(dis[x][y], z);}v[0] = 1;dis[0][0] = 0;for (int i = 1; i <= n; ++i)v[i] = v[i - 1] * 3, dis[i][i] = 0;for (int k = 0; k < n; ++k)for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j)dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);//Floydg[0] = 0;for (int now = 0; now < (1<<n); ++now)for (int i = 0; i < n; ++i)if (!(now & (1<<i)))for (int j = i + 1; j < n; ++j)if (!(now & (1<<j))){k = now ^ (1<<i) ^ (1<<j);g[k] = min(g[k], g[now] + dis[i][j]);//预处理奇数点的连边}d.push(2);f[2] = 0;while(!d.empty()){int now = d.front();d.pop();for (int i = 0; i < n; ++i){if (now / v[i] % 3) continue;k = now + v[i] * 2;//必须的连边不算奇偶性for (int j = h[i]; j; j = e[j].next){if (!(now / v[e[j].to] % 3)) continue;if (f[k] >= MX) d.push(k);f[k] = min(f[k], f[now]);}for (int j = 0; j < n; ++j)//不必须的连边{if (!(now / v[j] % 3)) continue;k = now + v[i];if (now / v[j] % 3 == 2) k -= v[j];//计算奇偶性else k += v[j];if (f[k] >= MX) d.push(k);f[k] = min(f[k], f[now] + dis[j][i]);}}}ans = MX;for (int now = 0; now <= v[n]; ++now){p = 0;k = 0;for (int i = 0; i < n; ++i){if (!(now / v[i] % 3) && deg[i])//有必须的点不在连通图内{p = 1;break;}if (now / v[i] % 3) k ^= (1<<i) * (now / v[i] % 3 == 1? 1: 0);//计算奇偶性}if (p) continue;k ^= nec;ans = min(ans, f[now] + g[k]);}printf("%d", sum + ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

在上文中我介绍了ASP.NET Core应用程序容器化时需要注意的几个问题&#xff0c;并给出了一个案例应用程序&#xff1a;tasklist。今天接着上文的内容&#xff0c;继续了解一下如何使用Azure DevOps进行ASP.NET Core应用程序的持续集成。为了便于讨论&#xff0c;本文会将持续集…

Codeforces Round #672 (Div. 2)

A - Cubes Sorting 冒泡排序交换次数等于逆序对数&#xff0c;严格降序需要交换n(n−1)2\frac{n(n-1)}{2}2n(n−1)​次才能升序排列&#xff0c;由此只需要判断原数组是否严格降序即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize…

P6134-[JSOI2015]最小表示【bitset,拓扑排序】

正题 题目链接:https://www.luogu.com.cn/problem/P6134 题目大意 给出一张nnn个点mmm条边的DAGDAGDAG。求联通情况不变的情况下最多删除几条边。 1≤n≤3104,0≤M≤1051\leq n\leq 3\times 10^4,0\leq M\leq 10^51≤n≤3104,0≤M≤105 解题思路 拓扑排序后&#xff0c;如果…

【每日一题】8月17日题目精讲-[SCOI2009]生日礼物

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 小西有一条很长的彩带&#xff0c;彩带上挂着各式各样的彩珠。已知彩珠有N个&#xff…

纪中A组模拟赛总结(2021.7.21)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4383838lyflyflyf393939363636000000333总结 T1发现数据很小可以直接暴力&#xff0c;就暴力求出所有方案数&#xff0c;然后堆排了一下 然后看到T2&#xff0c;发现不会 看着T3以为就是两种状态的最短…

Followme Devops step by step

接着上次分享的devops历程[Followme Devops实践之路], 大家希望能够出一个step by step手册, 那今天我就来和手把手来一起搭建这么一套环境, 演示整个过程!实验环境需要准备docker /docker compose建议大家使用国外的vps学习, 不需要考虑网络/gwf的问题/方便(本demo搭建在linod…

Codeforces Round #673 (Div. 2)——待补 E

由于开学了&#xff0c;一般晚上就不打cf了&#xff08;太晚了&#xff0c;寝室不太适合打&#xff09;&#xff0c;而且赛后也懒得vp&#xff0c;有时候会在图书馆口胡题目&#xff0c;然后回寝室补一补&#xff0c;不过我也写得太久了吧&#xff0c;很多细节疯狂wa A - Copy…

【每日一题】8月25日题目精讲 XOR-pyramid

文章目录题目描述&#xff1a;题解&#xff1a;代码&#xff1a;题目描述&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/problem/112798 来源&#xff1a;牛客网 输入描述: 输出描述: Print q lines — the answers for the queries. 示例1 输入 复制 3 8 4 1…

AT3611-Tree MST【点分治,最小生成树】

正题 题目链接:https://www.luogu.com.cn/problem/AT3611 题目大意 给出nnn个点的一棵树。 现在有一张完全图&#xff0c;两个点之间的边权为wxwydis(x,y)w_xw_ydis(x,y)wx​wy​dis(x,y)&#xff08;disdisdis表示树上距离&#xff09; 求这张完全图的最小生成树。 2≤n≤…

【LCT】大融合(luogu 4219)

正题 luogu 4219 题目大意 给你一棵树&#xff08;初始都无连边&#xff09;&#xff0c;让你进行以下操作&#xff1a; 1.连接两个点 2.查询一条边被多少条路径经过 解题思路 因为有边的修改&#xff0c;可以用LCT来维护这棵树 一条边的经过次数&#xff0c;就相当于连接…

申请Office 365一年免费的开发者账号攻略(2018年10月份版本)

要进行Office 365开发&#xff0c;当然需要有完整的Office 365环境才可以。为了便于广大开发人员快速地启动这项工作&#xff0c;微软官方给所有开发人员提供了免费的一年开发者账号那么如何申请Office 365一年免费的开发者账号呢&#xff1f;网上已经有一些攻略了&#xff0c;…

Codeforces Round #674 (Div. 3)

突如其来的div3&#xff0c;赛后打了一下。 A - Floor Number 数学题答案是1⌈n−2x⌉1\lceil \frac{n-2}{x} \rceil1⌈xn−2​⌉ #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm&…

【每日一题】8月28日题目精讲 编号

【每日一题】8月28日题目精讲 编号 链接&#xff1a;https://ac.nowcoder.com/acm/problem/19925 来源&#xff1a;牛客网 题目描述 你需要给一批商品编号&#xff0c;其中每个编号都是一个7位16进制数&#xff08;由0~9, a-f组成&#xff09;。为了防止在人工处理时不小心把编…

P4321-随机漫游【状压dp,数学期望,高斯消元】

正题 题目链接:https://www.luogu.com.cn/problem/P4321 题目大意 给出nnn个点mmm条边的一张无向图&#xff0c;qqq次询问。 每次询问给出一个点集和一个起点&#xff0c;求从起点出发随机游走经过所有点集的期望步数。 n∈[1,18],m∈[1,n(n−1)2],q∈[1,105]n\in[1,18],m\i…

开源若要天下闻,掌声须给教育人

引子故事一当我们介绍 Linux Kernel 项目历史的时候&#xff0c;我们会如此说&#xff1a;“1991 年&#xff0c;赫尔辛基大学的大学生 Linus torvald, 在自己的电脑上开发了一个能够运行在 X86 架构上的操作系统&#xff0c;并将它发布在互联网上&#xff0c;任何人都可以参与…

纪中A组模拟赛总结(2021.7.22)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4141414lyflyflyf101010000101010000000总结 T1明显状压&#xff0c;求方案感觉可以用容斥&#xff0c;但又发现假了&#xff0c;就跳过了 T2想找找有没有规律&#xff0c;就把表打了出来&#xff0c;但…

【模板】线性基

ACM模板 文章目录构造线性基线性基模板操作线性基相关题目学习线性基可考虑以下大佬博客 知乎Pecco博客 博客园Kaori博客 menci博客 肖然博客 从线性代数谈线性基&#xff08;有点硬核&#xff09; 构造线性基 普通插入&#xff1a; 不能保证除了主元上其他线性基元素该位置为…

【每日一题】8月27日题目精讲 Is It A Tree?

链接&#xff1a;https://ac.nowcoder.com/acm/problem/105905 来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 10000K&#xff0c;其他语言20000K 64bit IO Format: %lld 题目描述 A tree is a well-known data struct…

YbtOJ#631-次短路径【左偏树,最短路】

正题 题目链接:https://www.ybtoj.com.cn/contest/114/problem/1 题目大意 给出nnn个点mmm条边的一张无向图&#xff0c;对于每个点iii求不经过i∼1i\sim 1i∼1的最短路的第一条边的情况下iii到111的最短路 数据保证这条边唯一 n∈[1,105],m∈[1,2105],c∈[1,103]n\in[1,10^…

好代码是管出来的——使用Jenkins搭建CI服务器

Jenkins是一个开源的跨平台的CI工具&#xff0c;它可以部署在Windows、Linux等平台上&#xff0c;并且Jenkins提供了非常丰富的插件来帮助完成编译、测试、部署等工作。  本文将介绍在Windows平台上使用Jenkins完成.Net Core应用的持续集成环境搭建&#xff0c;其主要内容有&…