bzoj4479: [Jsoi2013]吃货jyy 欧拉回路+状态压缩Dp

bzoj4479: [Jsoi2013]吃货jyy

Description

【故事背景】
作为JSOI的著名吃货,JYY的理想之一就是吃遍全世界的美食。要走遍全
世界当然需要不断的坐飞机了。而不同的航班上所提供的餐食是很不一样的:比
如中国的航班会提供中餐,英国的航班有奶茶和蛋糕,澳大利亚的航班有海鲜,
新加坡的航班会有冰激凌……JYY选出了一些他特别希望品尝餐食的航班,希望
制定一个花费最少的旅游计划,能够从南京出发,乘坐所有这些航班并最后回到
南京。
【问题描述】
世界上一共有N个JYY愿意去的城市,分别从1编号到N。JYY选出了K
个他一定要乘坐的航班。除此之外,还有M个JYY没有特别的偏好,可以乘坐
也可以不乘坐的航班。
一个航班我们用一个三元组(x,y,z)来表示,意义是这趟航班连接城市x和y,
并且机票费用是z。每个航班都是往返的,所以JYY花费z的钱,既可以选择从
x飞往y,也可以选择从y飞往x。
南京的编号是1,现在JYY打算从南京出发,乘坐所有K个航班,并且最
后回到南京,请你帮他求出最小的花费。

Input

输入数据的第一行包含两个整数N和K;
接下来K行,每行三个整数x,y,z描述必须乘坐的航班的信息,数据保证
在这K个航班中,不会有两个不同的航班在同一对城市之间执飞;
第K+2行包含一个整数M;
接下来M行,每行三个整数x,y,z描述可以乘坐也可以不乘坐的航班信息。
2<=N<=13,0<=K<=78,2<=M<=200,1<=x,y<=N,1<=z<=10^4

Output

输出一行一个整数,表示最少的花费。数据保证一定存在满足JYY要求的
旅行方案。

Sample Input

6 3
1 2 1000
2 3 1000
4 5 500
2
1 4 300
3 5 300

Sample Output

3100
一个可行的最佳方案为1->2->3->5->4->1。
机票所需的费用为1000+1000+300+500+300=3100

分析

应该是jjy中最难的一道吧
一句话题意:求一张无向带权图经过K条边的一条最小权回路。
注意到点数很小,估摸着是状态压缩。
首先回路这个条件很烦,所以我们先直接转化成若干个连通的偶点。
由于这K条边是必选的,所以我们先直接加入这K条边,那么对应的最终状态也必须包含着K条边的所有的端点,这K条边的代价最后加上。
一旦直接选入了这K条边,那么就意味着还需要选若干条可重复的边,选完这些边之后使得最终状态图的每个点奇偶性满足全是偶数。所以对于每个点,我们需要压缩的信息肯定是他们为奇点还是偶点。
同时还要满足他们是连通的,于是再压缩一个是否连通块内。
显然不在连通块内不需要考虑奇偶性,所以这是一个3进制状态压缩。
定义状态 S

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值