ACM模版

描述

题解

朱刘算法,最小树形图,第一次做这个算法的题,感觉自己无知迷茫的眼神好萌,目前大致理解了原理,可是还停留在套模版的水平……甚至,连模版都套不好,/(ㄒoㄒ)/~~

代码

#include <iostream>
#include <cstring>using namespace std;/**  最小树形图*  int型*  复杂度O(NM)*  点从0开始*/
const int INF = 0x3f3f3f3f;
const int MAXN = 1010;
const int MAXM = 11010;struct Edge
{int u, v, cost;
};Edge edge[MAXM];int pos;
int pre[MAXN], id[MAXN], visit[MAXN], in[MAXN];int zhuliu(int root, int n, int m)
{int res = 0, v;while (1){memset(in, 0x3f, sizeof(in));for (int i = 0; i < m; i++){if (edge[i].u != edge[i].v && edge[i].cost < in[edge[i].v]){pre[edge[i].v] = edge[i].u;in[edge[i].v] = edge[i].cost;if (edge[i].u == root){pos = i;}}}for (int i = 0; i < n; i++){if (i != root && in[i] == INF){return -1;  //  不存在最小树形图}}int tn = 0;memset(id, -1, sizeof(id));memset(visit, -1, sizeof(visit));in[root] = 0;for (int i = 0; i < n; i++){res += in[i];v = i;while (visit[v] != i && id[v] == -1 && v != root){visit[v] = i;v = pre[v];}if (v != root && id[v] == -1){for (int u = pre[v]; u != v ; u = pre[u]){id[u] = tn;}id[v] = tn++;}}if (tn == 0){break;  //  没有有向环}for (int i = 0; i < n; i++){if (id[i] == -1){id[i] = tn++;}}for (int i = 0; i < m; i++){v = edge[i].v;edge[i].u = id[edge[i].u];edge[i].v = id[edge[i].v];if (edge[i].u != edge[i].v){edge[i].cost -= in[v];}}n = tn;root = id[root];}return res;
}int main()
{int n, m;while (~scanf("%d%d", &n, &m)){int sum = 0;for (int i = 0; i < m; i++){scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].cost);edge[i].u++;edge[i].v++;sum += edge[i].cost;}sum++;//  增加超级节点0,节点0到其余各个节点的边权相同(此题中 边权要大于原图的总边权值)for (int i = m; i < m + n; i++){edge[i].u = 0;edge[i].v = i - m + 1;edge[i].cost = sum;}int ans = zhuliu(0, n + 1, m + n);//  n+1为总结点数,m+n为总边数//  ans代表以超级节点0为根的最小树形图的总权值,//  将ans减去sum,如果差值小于sum,说明节点0的出度只有1,说明原图是连通图//  如果差值>=sum,那么说明节点0的出度不止为1,说明原图不是连通图if (ans == -1 || ans - sum >= sum){puts("impossible");}else{printf("%d %d\n",ans - sum, pos - m);}puts("");}return 0;
}

参考

《最小树形图》

HDU-2121-Ice_cream’s world II相关推荐

  1. HDU 2121 Ice_cream’s world II(最小树形图+虚根)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2121        题意是有n个点(0--n-1),m条有向边,问以那个点作为起点使得最小生成树的权值 ...

  2. HDU 2121 Ice_cream’s world II (最小树形图+虚根)

    题意:有n个点(0~n-1),m条有向边,问以哪个点作为起点使得最小生成树的权值最小,如果可以构成输出权值和顶点编号,否则输出impossible. 题解:最小树形图+虚根 还好做了这题,板子有点问题 ...

  3. HDU - 2121 Ice_cream’s world II(朱刘算法+虚根)

    题目大意:给你N个点,M条有向边,问以哪个点为根结点时,能使最小生成树总权值达到最小,输出总权值和根. 如果构不成最小生成树,另外输出 解题思路:这题很巧妙,暴力枚举的话,肯定TLE,所以,这题就需要 ...

  4. hdu 2121 Ice_cream’s world II

    无固定根节点的最小树形图,添加一个人工根节点,人工根节点到每个节点的权值sum>(所有边权值之和), 求出结果减去sum,只有人工根节点跟一个节点相连时才会有解,如果结果大于等于sum,则人工节 ...

  5. HDU2121:Ice_cream’s world II (虚根+有向图最小生成树)

    Ice_cream's world II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. hdu2121 Ice_cream's world II

    hdu2121 Ice_cream's world II 给一个有向图,求最小树形图,并输出根节点 \(n\leq10^3,\ m\leq10^4\) 最小树形图 对于求无根最小树形图,可以建一个虚拟 ...

  7. HDU.1002 A + B Problem II

    原题 HDU.1002 A + B Problem II 分类 杂题·大位整数运算 题意 计算从任意两个长度在1000以内的正整数的和. 输入/输出 要求与格式 输入内容 最开始一行开始输入样例数,对 ...

  8. hdu 5265 pog loves szh II STL

    pog loves szh II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  9. HDU - 2122 Ice_cream’s world III

    ice_cream's world becomes stronger and stronger; every road is built as undirected. The queen enjoys ...

  10. hdu 2121 最小树形图 +虚根

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2121 题意: n个城市,m条单向边,每条边都有一个权值,现在要你求出这样一个节点,由这个节点出发能走遍 ...

最新文章

  1. 探寻背后的机制化繁为简:网站程序升级不过是文件同步
  2. 苍狼敏捷方法核心 v1
  3. selenium webdriver 启动三大浏览器Firefox,Chrome,IE
  4. 小皮面板phpstudy的MYSQL服务无法启动_ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)
  5. (转)C++的 RTTI 概念和用途
  6. hdu 2489 Minimal Ratio Tree
  7. [bzoj 3594] [Scoi2014]方伯伯的玉米田
  8. 《尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)》视频1
  9. Excel自动批量发邮件
  10. 我要偷偷的学Python,然后惊呆所有人(第一天)
  11. Systemverilog always_comb 过程块
  12. 区块链学习——HyperLedger-Fabric v0.6环境搭建详细过程
  13. NVIDIA NCCL 源码学习(六)- channel搜索
  14. 极路由 mysql_用极路由3和移动硬盘DIY时间胶囊TimeCapsule做备份
  15. 学生党必备读书笔记app推荐
  16. fmt:formatDate标签的输出格式
  17. 使用Selenium时,如何选择ChromeDriver驱动版本对应Chrome浏览器版本
  18. java.sql.SQLException: Parameter index out of range (4 number of parameters, which is 2).
  19. MultiValueMap
  20. String.format()的详细用法

热门文章

  1. 可视化拖拽组件库一些技术要点原理分析(二)
  2. 原理图-电源电路设计
  3. 深入理解如何不费吹灰之力搭建一个无人驾驶车(二)2D-小车其他部分(独创导航各参数解析)
  4. 我们都是IT民工---------流浪人IDE开发札记
  5. [FineReport]图表运用之-世界地图
  6. 实现电话自动拨打、挂断
  7. 全国计算机一级a还是b,计算机一级证和一级B证的区别是什么
  8. 微信开发者工具设置制表符大小为2
  9. python 组合优化 回撤最小_Python最优化——构建你的资产组合投资
  10. 机器人工程的工作与考研之困惑“以学生为中心”