HDU 4085 Peach Blossom Spring
斯坦纳树。
最后可以是森林,在计算出每个联通状态的最小费用后,还需要进行一次$dp$。
#include<bits/stdc++.h> using namespace std;const int INF=0x7FFFFFFF; int T,n,m,k; vector<int>g[60]; int val[60][60],id[60],d[60][1200],dp[1200]; int f[60*10000]; queue<int>Q;void spfa() {while(!Q.empty()){int h = Q.front(); Q.pop(); f[h]=0;int x=h/10000,y=h%10000;for(int i=0;i<g[x].size();i++){int to = g[x][i];if(to<2*k){if(((1<<to)&y)==0){if(d[x][y]+val[x][to]<d[to][y|(1<<to)])d[to][y|(1<<to)]=d[x][y]+val[x][to];}}else{if(d[x][y]+val[x][to]<d[to][y]){d[to][y] = d[x][y]+val[x][to];if(f[to*10000+y]==0){f[to*10000+y]=1;Q.push(to*10000+y);}}}}} }bool check(int x) {int sum1=0,sum2=0;for(int i=0;i<=k-1;i++) if(x&(1<<i)) sum1++;for(int i=k;i<=2*k-1;i++) if(x&(1<<i)) sum2++;if(sum1==sum2) return 1;return 0; }int main() {scanf("%d",&T);while(T--){scanf("%d%d%d",&n,&m,&k);for(int i=0;i<n;i++){id[i]=i;g[i].clear();}id[k]=n-k; for(int i=k+1;i<=2*k-1;i++) id[i]=id[i-1]+1;id[n-k]=k; for(int i=n-k+1;i<=n-1;i++) id[i]=id[i-1]+1;for(int i=0;i<n;i++)for(int j=0;j<n;j++) val[i][j]=INF;memset(f,0,sizeof f);for(int i=1;i<=m;i++){int a,b,c; scanf("%d%d%d",&a,&b,&c);a--; b--; a=id[a]; b=id[b];val[a][b]=min(val[a][b],c);val[b][a]=val[a][b];g[a].push_back(b);g[b].push_back(a);}int st = 1<<(2*k);for(int j=0;j<st;j++)for(int i=0;i<n;i++) d[i][j]=INF;for(int i=0;i<n;i++){if(i<2*k) d[i][1<<i]=0;else d[i][0]=0;}for(int j=0;j<st;j++){for(int i=0;i<n;i++){if(i<2*k){if(((1<<i)&j)==0) continue;for (int x = j; x; x = (x-1)&j){int A=x ,B=j-A;if(d[i][A|(1<<i)]!=INF&&d[i][B|(1<<i)]!=INF)d[i][j] = min(d[i][j], d[i][A|(1<<i)]+d[i][B|(1<<i)]);}}else{for (int x = j; x; x = (x-1)&j){int A=x ,B=j-A;if(d[i][A]!=INF&&d[i][B]!=INF)d[i][j] = min(d[i][j], d[i][A]+d[i][B]);}}if(d[i][j]!=INF) Q.push(i*10000+j);}spfa();}for(int j=0;j<st;j++){dp[j]=INF;for(int i=0;i<n;i++) dp[j]=min(dp[j],d[i][j]);}for(int j=0;j<st;j++){for (int x = j; x; x = (x-1)&j){int A=x ,B=j-A;if(check(A)&&check(B)&&dp[A]!=INF&&dp[B]!=INF)dp[j]=min(dp[j],dp[A]+dp[B]);}}if(dp[st-1]!=INF) printf("%d\n",dp[st-1]);else printf("No solution\n");}return 0; }
转载于:https://www.cnblogs.com/zufezzt/p/6638320.html
HDU 4085 Peach Blossom Spring相关推荐
- HDU 4085 Peach Blossom Spring(斯坦纳树)
题意:k个房子k个庇护所,每一座房子都必须可以和一个庇护所联通.. 分析:斯坦纳森林模板题,不是所有要求点都连通,题目就是要求斯坦纳森林,由于上述限制条件,合法的状态必须是房子数量和庇护所数量相同,最 ...
- HDU 4085 Steiner树模板称号
Dig The Wells Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- 业界萌新对斯坦纳树的小结
业界萌新对斯坦纳树的小结 0.简介 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在给定的点集和边中寻求最短网络使所有点连通.而最小斯坦纳树允许在给定点外增加额外的点,使 ...
- 杭电OJ分类题目(4)-Graph
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
- 一系列图论问题[转]
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- 【转】并查集MST题集
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 ...
- kk_想要学习的知识
2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...
最新文章
- VMware推出vRealize,全面加速数字化与混合云的迁移
- swing下拉框从mysql_Java Swing应用程序 JComboBox下拉框联动查询
- AC日记——[ZJOI2009]狼和羊的故事 bzoj 1412
- java se ee me都有什么区别?
- 增加磁盘,无需reboot
- ios 中的tintColor
- 联合国为何 Pick 腾讯?
- 在线二进制转文本工具
- 应用组件的名字与已安装应用有冲突
- 读书有益——》小朋友的诗(六)
- Elasticsearch索引新增字段
- Word图文混排的“ 锚 “
- IOS 5支持的字体
- Java 爬虫微信公众号详情,并且破解微信图片跨域问题
- 内容算法:新闻“标题党”检测方法综述
- Differentially Private Deep Learning with Iterative Gradient Descent Optimization
- oracle 去除重复数据 只取一条数据
- 华为发布5G最新产品,支持中国运营商建设最佳5G网
- 5G将如何颠覆行业?
- mybatis学习笔记-Invalid bound statement (not found): com.feng.dao.UserMapper.findAll
热门文章
- 2018.09.17-2018.09.23
- 打造智能家居安防系统 七个选购常识你需懂
- linux下命令集合
- JavaScript 与 PHP 的语法区别
- iOS 缓存的获取计算与清除归零
- Mysql group by,order by,dinstict优化
- MYSQL中的空格及大小写问题
- 信息技术及其发展_中科院心理研究所隋南教授受邀来校并做“生命科学:研究模式的演变及其整合趋势”学术报告...
- var _ 接口 = 结构体{}
- mysql索引需要了解的几个注意