精简改良

尚未提交 尚未通过 时间限制:2000ms 内存限制:256MB

0.00%

提交人数:1

通过人数:0

题目描述

 

可怜最近在玩一款硬核战争游戏。

可怜控制的国家有 nn 座城市,在 nn 座城市之间有 mm 条双向道路,第 ii 条道路连接了城市 u_iui​ 和 v_ivi​,且通过这条道路的时间为 w_iwi​。

最近,可怜点了名为"传送"的科技,这个科技可以让可怜的士兵能在国家的任意两个城市之间不经过道路快速地传送。这样从战争的角度来说,道路几乎就没有用了,可怜希望能删除一些道路,使得道路系统尽可能地不便,这样在敌人入侵时就能获得优势。

游戏的规则规定在任何时刻,同一个国家的任意两个城市之间都必须要能通过道路到达。因此可怜需要保证在删除道路之后,道路系统仍然是联通的。

令 d(i,j)d(i,j) 为通过道路系统从第 ii 个城市到第 jj 个系统的最短时间,可怜定义一个道路系统的复杂度为 \sum_{i=1}^n \sum_{j=i+1}^n d(i,j)∑i=1n​∑j=i+1n​d(i,j)。可怜希望能删除一些道路,在保证图联通的情况下,使道路系统的复杂度尽可能的大。

 

 
 

输入描述

 

一行输入两个整数 n,m(1 \leq n \leq 14, 1 \leq m \leq \frac{n(n-1)}{2})n,m(1≤n≤14,1≤m≤2n(n−1)​),表示城市数量与初始的道路数量。

接下来 mm 行每行输入三个整数 u_i,v_i,w_i(1 \leq u_i,v_i \leq n, 1 \leq w_i \leq 10^9)ui​,vi​,wi​(1≤ui​,vi​≤n,1≤wi​≤109),描述了一条道路。

输入保证图中没有自环、重边,同时图是联通的。

 

输出描述

 

输出一行一个整数,表示道路系统最大的可能的复杂度。

 

样例输入 1 

5 5
1 2 1
1 3 1
2 4 1
2 5 1
1 5 1

样例输出 1

20

样例输入 2 

5 10
1 2 1
1 3 2
1 4 3
1 5 4
2 3 5
2 4 6
2 5 7
3 4 8
3 5 9
4 5 10

样例输出 2

146




生成树dp 套路dp[s][i] 集合 s,以i为树根的 什么什么东西两个集合合并的时候考虑连接两个集的边然后用到了子集的遍历



 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 #define ll long long
 5 #define INFLL 0x3f3f3f3f3f3f3f3f
 6 #define N 110
 7 int n, m;
 8 int dist[20][20];
 9 ll f[1 << 15][15];
10
11 vector <int> vec[1 << 15];
12 int sze[1 << 15];
13
14 int main()
15 {
16     while (scanf("%d%d", &n, &m) != EOF)
17     {
18         memset(dist, -1, sizeof dist);
19         memset(f, -1, sizeof f);
20         for (int S = 0, len = (1 << n); S < len; ++S)
21         {
22             for (int i = 0; i < n; ++i) if ((S >> i) & 1)
23                 vec[S].push_back(i + 1);
24             sze[S] = vec[S].size();
25             if (sze[S] == 1)
26                 f[S][*vec[S].begin()] = 0;
27         }
28         for (int i = 1, u, v, w; i <= m; ++i)
29         {
30             scanf("%d%d%d", &u, &v, &w);
31             dist[u][v] = dist[v][u] = w;
32         }
33         ll res = 0;
34         for (int S = 1, len = (1 << n); S < len; ++S)
35         {
36             for (auto u : vec[S])
37             {
38                 for (int T = (S - 1) & S; T != 0; T = (T - 1) & S) // 枚举子集
39                 {
40                     for (auto v : vec[T])
41                     {
42                         if (dist[u][v] == -1 || f[T][v] == -1 || f[S - T][u] == -1) continue;
43                         f[S][u] = max(f[S][u], f[T][v] + f[S - T][u] + 1ll * dist[u][v] * sze[T] * (n - sze[T]));
44                     }
45                 }
46                 if (S == (1 << n) - 1)res = max(res, f[S][u]);
47             }
48         }
49         printf("%lld\n", res);
50     }
51     return 0;
52 }

转载于:https://www.cnblogs.com/zhangbuang/p/10956909.html

精简改良(生成树dp)相关推荐

  1. 抓球球的机器人应该怎么玩_尖塔奇兵机器人怎么玩 机器人玩法及套路

    尖塔奇兵机器人是游戏三大职业之一,这个职业怎么才能玩的好呢,下面给大家介绍该职业的玩法和套路. 机器人玩法及套路 经过beta多次对机器人的调整,强度终于正常了,大概和猎***作难度和强度相当. 15 ...

  2. 游戏怎么这么卡?!--浅谈手游开发性能优化

    前言.手游优化为什么这么难? 手机性能比pc差很多,而且手机性能参差不齐,低端机占有的比例又比较大,导致很多游戏必须向低端机对齐,很苛刻的优化游戏的性能. 并且,手游端的开发环境还有很多缺陷,例如对V ...

  3. HDU5697 刷题计划 dp+最小乘积生成树

    分析:就是不断递归寻找靠近边界的最优解 学习博客(必须先看这个): 1:http://www.cnblogs.com/autsky-jadek/p/3959446.html 2:http://blog ...

  4. HDU 5304 Eastest Magical Day Seep Group's Summer(状压DP+环缩点+生成树计数)

    题意:给出一个图m条边和n个顶点,要求删除m-n条边使得原图联通,问有多少种方法. 思路:显然删除后的图是由一棵树和额外的一条边组成的,如果只有树那么可以用MATRIX-TREE定理求出生成树的数量, ...

  5. LeetCode 1130. 叶值的最小代价生成树(区间DP/单调栈贪心)

    文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调栈贪心 1. 题目 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点. 数组 arr 中的 ...

  6. 【HDU】5304 Eastest Magical Day Seep Group's Summer【环dp+生成树计数】

    传送门:[HDU]5304 Eastest Magical Day Seep Group's Summer my  code: my~~code: #include <bits/stdc++.h ...

  7. hdu5304 Eastest Magical Day Seep Group#39;s Summer 状压dp+生成树

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5304 16个点的无向图,问能生成多少个n条边的连通图.(即多一条边的树) 先n^3 * 2^n 枚举全部的 ...

  8. hdu5304 Eastest Magical Day Seep Group's Summer 状压dp+生成树

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5304 16个点的无向图,问能生成多少个n条边的连通图.(即多一条边的树) 先n^3 * 2^n 枚举所有的 ...

  9. php实现无限分类超牛逼,PHP超牛逼无限极分类生成树方法_php技巧

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了. 这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. 代码如下: fun ...

最新文章

  1. 强大的Web日志分析工具_AWSTATS 应用实例
  2. BZOJ 2073: [POI2004]PRZ( 状压dp )
  3. Mysql JDBC 连接串参数说明
  4. 雅虎将于4月底关闭自助式广告测试
  5. Tomcat(四):发布和优化
  6. 38 SD配置-销售凭证设置-定义拒绝原因
  7. foo( a )JAVA面试题_Java相关面试题总结+答案(五)
  8. Activity 的窗口去头的方式
  9. 擠出機步進馬達的 Steps per Unit 該如何計算?
  10. PyTorch并行与分布式(三)DataParallel原理、源码解析、举例实战
  11. 三菱PLC 计数器C
  12. BT.656标准简介
  13. 动态物体检测(python)
  14. 自己写的vue图片上传插件(假装是插件)
  15. Ubuntu18.04安装win7虚拟机
  16. Java开发 - SpringCache初体验
  17. 一键U盘装系统 电脑为什么突然打不开
  18. 设计一个简单的四则计算器
  19. 大数据技术之_01_Linux学习_01_linux的入门+VM和linux的安装+linux的目录结构+远程登录到linux服务器+vi和vim编辑器+开机、重启和用户登录注销+用户管理+用户组管理
  20. 基于神经网络的模式识别

热门文章

  1. 中国建设银行(2011.11.19南京大学)
  2. Cordova/Ionic Android 开发环境搭建 - Windows系统
  3. Python基础学习01
  4. ashx 绝对路径得到物理路径
  5. JAVA实现创建Excel表并导出(转发)
  6. matplotlib包画基本的图
  7. django 快速实现注册(四)
  8. SQL大圣之路笔记——SQL 创建索引 index
  9. 冒泡排序,swich语句,while循环...基础性的一道综合题初学者可以做一个简单的测试...
  10. 【PM】当大厂来临时,求生?求胜?