斯坦纳树。

最后可以是森林,在计算出每个联通状态的最小费用后,还需要进行一次$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相关推荐

  1. HDU 4085 Peach Blossom Spring(斯坦纳树)

    题意:k个房子k个庇护所,每一座房子都必须可以和一个庇护所联通.. 分析:斯坦纳森林模板题,不是所有要求点都连通,题目就是要求斯坦纳森林,由于上述限制条件,合法的状态必须是房子数量和庇护所数量相同,最 ...

  2. HDU 4085 Steiner树模板称号

    Dig The Wells Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  3. 业界萌新对斯坦纳树的小结

    业界萌新对斯坦纳树的小结 0.简介 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在给定的点集和边中寻求最短网络使所有点连通.而最小斯坦纳树允许在给定点外增加额外的点,使 ...

  4. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  7. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  8. 【转】并查集MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 ...

  9. kk_想要学习的知识

    2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...

最新文章

  1. VMware推出vRealize,全面加速数字化与混合云的迁移
  2. swing下拉框从mysql_Java Swing应用程序 JComboBox下拉框联动查询
  3. AC日记——[ZJOI2009]狼和羊的故事 bzoj 1412
  4. java se ee me都有什么区别?
  5. 增加磁盘,无需reboot
  6. ios 中的tintColor
  7. 联合国为何 Pick 腾讯?
  8. 在线二进制转文本工具
  9. 应用组件的名字与已安装应用有冲突
  10. 读书有益——》小朋友的诗(六)
  11. Elasticsearch索引新增字段
  12. Word图文混排的“ 锚 “
  13. IOS 5支持的字体
  14. Java 爬虫微信公众号详情,并且破解微信图片跨域问题
  15. 内容算法:新闻“标题党”检测方法综述
  16. Differentially Private Deep Learning with Iterative Gradient Descent Optimization
  17. oracle 去除重复数据 只取一条数据
  18. 华为发布5G最新产品,支持中国运营商建设最佳5G网
  19. 5G将如何颠覆行业?
  20. mybatis学习笔记-Invalid bound statement (not found): com.feng.dao.UserMapper.findAll

热门文章

  1. 2018.09.17-2018.09.23
  2. 打造智能家居安防系统 七个选购常识你需懂
  3. linux下命令集合
  4. JavaScript 与 PHP 的语法区别
  5. iOS 缓存的获取计算与清除归零
  6. Mysql group by,order by,dinstict优化
  7. MYSQL中的空格及大小写问题
  8. 信息技术及其发展_中科院心理研究所隋南教授受邀来校并做“生命科学:研究模式的演变及其整合趋势”学术报告...
  9. var _ 接口 = 结构体{}
  10. mysql索引需要了解的几个注意