题目大意:给你N个点,M条有向边,问以哪个点为根结点时,能使最小生成树总权值达到最小,输出总权值和根。
如果构不成最小生成树,另外输出

解题思路:这题很巧妙,暴力枚举的话,肯定TLE,所以,这题就需要点技巧了
可以设一个虚根,虚根连接每一个点,权值为所有边的总权值+1。接着,以虚根为根,跑朱刘算法。
跑出结果后,要判断一下,如果最小生成树的总权值比2 * (所有边的总权值+1)还要大,表示虚根至少和两个点相连了,这样最小生成树就是棵假的最小生成树了,因为至少有两个点入度为0了

得到结果时要怎么找到根,可以用边来判断。我们先构造的是m条边,后面又构造了n条边(虚根到每个点),如果某个点的最小入权值为虚根到该点的权值了,那就证明该点就是最小根了。因为只有下标大于等于m的边才是虚根到点的边,所以只要纪录一下下标,最后输出时用下标-m就得到该点了

#include <cstdio>
#include <cstring>#define M 20010
#define N 1010struct Edge{int from, to, cost;
}E[M];int n, m, tot;
int Sum;void AddEdge(int u, int v, int c) {E[tot].from = u;E[tot].to = v;E[tot++].cost = c;
}void init() {tot = 0; Sum = 0;int u, v, c;for (int i = 0; i < m; i++) {scanf("%d%d%d", &u, &v, &c);AddEdge(u, v, c);Sum += c;}Sum++;for (int i = 0; i < n; i++) {AddEdge(n, i, Sum);}
}#define INF 0x3f3f3f3f
int minroot;
int pre[N], vis[N], id[N], in[N];int Directed_MST(int root) {int ans = 0, u, v, tmp;while (1) {memset(pre, -1, sizeof(pre));for (int i = 0; i < n; i++)in[i] = INF;for (int i = 0; i < tot; i++) {u = E[i].from;v = E[i].to;if (u != v && E[i].cost < in[v]) {in[v] = E[i].cost;pre[v] = u;if (u == root) minroot = i;}}for (int i = 0; i < n; i++) {if (i == root)continue;if (in[i] == INF)return -1;}int cnt = 0;memset(vis, -1, sizeof(vis));memset(id, -1, sizeof(id));in[root] = 0;for (int i = 0; i < n; i++) {ans += in[i];tmp = i;while (tmp != root && id[tmp] == -1 && vis[tmp] != i) {vis[tmp] = i;tmp = pre[tmp];}if (tmp != root && id[tmp] == -1) {u = pre[tmp];while (u != tmp) {id[u] = cnt;u = pre[u];}id[tmp] = cnt++;}}if (cnt == 0)break;for (int i = 0; i < n; i++)if (id[i] == -1)id[i] = cnt++;for (int i = 0; i < tot; i++) {tmp = E[i].to;E[i].from  = id[E[i].from];E[i].to = id[E[i].to];if (E[i].from != E[i].to)E[i].cost -= in[tmp];}n = cnt;root = id[root];}return ans;
}void solve() {n++;int ans = Directed_MST(n - 1);if (ans == -1 || ans >= 2 * Sum)printf("impossible\n");elseprintf("%d %d\n", ans - Sum, minroot - m);printf("\n");
}int main() {while (scanf("%d%d" ,&n, &m) != EOF) {init();solve();}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

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

  4. 【朱-刘算法】【最小树形图】hdu6141 I am your Father!

    题意:给你一张带权有向图,让你求最大树形图.并在此前提下令n号结点父亲的编号最小. 比赛的时候套了个二分,TLE了. 实际上可以给每个边的权值乘1000,对于n号结点的父边,加上(999-父结点编号) ...

  5. poj3164(最小树形图朱刘算法模板)

    题目链接:http://poj.org/problem?id=3164 题意:第一行为n, m,接下来n行为n个点的二维坐标, 再接下来m行每行输入两个数u, v,表点u到点v是单向可达的,求这个有向 ...

  6. [UVA - 11865]Stream My Contest(最小树形图+朱刘算法)

    本题过于简单,朱刘算法模板题,考虑二分一下带宽即可 title code title code #include <cstdio> #include <cstring> #in ...

  7. [POJ 3164]Command Network(最小树形图,朱刘算法)

    文章目录 title solution code title solution 读完翻译后,很明显就是个朱刘算法的板子题 最小树形图,就是给出一个带权有向图 从中指定一个特殊的结点 root 求一棵以 ...

  8. NOIP模拟题 通讯 强连通分量缩点 最小树形图--朱刘算法

    通讯 (message.cpp\c\pas) [问题描述] "这一切都是命运石之门的选择." 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短信,并由此得知了伦 ...

  9. 最小树形图 之 朱刘算法【模板】

    定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入 ...

最新文章

  1. Linux Exploit系列之三 Off-By-One 漏洞 (基于栈)
  2. Android实现手机手电筒
  3. java自定义日志级别_自定义log4j日志级别
  4. 蓝桥杯 基础练习 2n皇后
  5. 测测你的显示器灰阶显示
  6. cocos2dx标准容器_cocos2dx基础篇(5)——浅析几个重要类
  7. 20200505:力扣151周周赛上
  8. 视频流媒体推流平台EasyRTMP安卓版使用前置摄像头推流发现画面镜像怎么办?
  9. EasyUI(搭建框架layout布局)
  10. 计算器算贝塞尔公式_我不是灯光设计师,但是我会算空间的平均照度
  11. Overleaf 硕士毕业论文参考文献格式设置
  12. android webview软键盘监听删除键、回车键、其他键
  13. dellR230服务器如何进PE系统,戴尔服务器怎么进入u盘启动模式 选择oneshotbios
  14. 随手练——字符串按最小(大)字典序拼接
  15. python入门算法_Python 算法入门教程
  16. c++ vs2015 播放音乐_索尼NW-A105HN对比飞傲M11,高解析音乐播放器之间有何差距?...
  17. 一个在线学习正则表达式的网站
  18. CH340和PL2303安装(带链接)
  19. 骑行中央公园,探索纽约“后花园”别样的美
  20. 端口隔离是什么?为什么需要端口隔离、如何实现端口隔离?一文解惑

热门文章

  1. SpringBoot系列之Spring Data MongoDB教程
  2. 成功鲜有偶然:一览IT名人的教育成长经历
  3. dellr320故障_PowerEdge_R320技术规格
  4. dellr420部署os_Dell R420 RAID建立以及系统安装
  5. WoShop跨境电商USDT支付语言插件全开源无加密商城源码
  6. 公链扩展路线之争:道阻且长的过程中Ardor 3.0能为我们带来什么?
  7. Vue2.0开发之——购物车案例-Footer组件封装-计算商品的总价格(51)
  8. OpenXR+Runtime:OpenXR SDK与Runtime的衔接
  9. linux驱动开发之spi-omap-100k.c源码分析
  10. 雇佣兵战斗力c语言原理,暗黑2单机弓箭亚马逊应该怎么选技能和雇佣兵