/*
本题为不是固定根的最小树形图,我们可以虚拟出一根来,然后在把这个根跟每个点相连,相连的点可以设为无穷大,或者设为所有边和大一点,比如为r,然后就可以利用最小树形图进行计算了,计算出的结果减去r,如果比r还大就可以认为通过这个虚拟节点我们连过原图中两个点,即原图是不连通的,我们就可以认为不存在最小树形图。关于输出最小根也挺简单,在找最小入弧时,如果这条弧的起点是虚拟根,那么这条弧的终点就是要求的根。
*/
#include <cstdio>
#include <iostream>
#include<queue>
#include<set>
#include<ctime>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<cstring>
using namespace std;
const double eps=1e-10;
#define M 1009
#define type __int64
const type inf=(1LL)<<60;
struct point
{
int x,y,h;
}p[M];
struct Node{
int u , v;
type cost;
}E[M*M+5];
int pre[M],ID[M],vis[M];
type In[M],sum;
int n,m,ansi;
type Directed_MST(int root,int NV,int NE) {
type ret = 0;
while(true) {
//1.找最小入边
for(int i=0;i<NV;i++) In[i] = inf;
for(int i=0;i<NE;i++){
int u = E[i].u;
int v = E[i].v;
if(E[i].cost < In[v] && u != v) {
pre[v] = u;
if(u==root)//记录是root从哪一条边到有效点的(这个点就是实际的起点)
ansi=i;
In[v] = E[i].cost;
}
}
for(int i=0;i<NV;i++) {
if(i == root) continue;
if(In[i] == inf) return -1;//除了跟以外有点没有入边,则根无法到达它
}
//2.找环
int cntnode = 0;
memset(ID,-1,sizeof(ID));
memset(vis,-1,sizeof(vis));
In[root] = 0;
for(int i=0;i<NV;i++) {//标记每个环
ret += In[i];
int v = i;
while(vis[v] != i && ID[v] == -1 && v != root) {
vis[v] = i;
v = pre[v];
}
if(v != root && ID[v] == -1) {
for(int u = pre[v] ; u != v ; u = pre[u]) {
ID[u] = cntnode;
}
ID[v] = cntnode ++;
}
}
if(cntnode == 0) break;//无环
for(int i=0;i<NV;i++) if(ID[i] == -1) {
ID[i] = cntnode ++;
}
//3.缩点,重新标记
for(int i=0;i<NE;i++) {
int v = E[i].v;
E[i].u = ID[E[i].u];
E[i].v = ID[E[i].v];
if(E[i].u != E[i].v) {
E[i].cost -= In[v];
}
}
NV = cntnode;
root = ID[root];
}
return ret;
}
int main()
{
int u,v;
type w;
while(scanf("%d%d",&n,&m)!=EOF)
{
sum=0;
for(int i=0;i<m;i++)
{
scanf("%d%d%I64d",&u,&v,&w);
u++;
v++;
E[i].u=u;
E[i].v=v;
E[i].cost=w;
sum+=w;
}
sum++;
for(int i=m;i<m+n;i++)//第i条边的终点为i-m;
{
E[i].u=0;
E[i].v=i-m+1;
E[i].cost=sum;
}
type ans=Directed_MST(0,n+1,m+n);
if(ans==-1||ans-sum>=sum)//最小树形图的边权和值大于sum的两倍,说明不可能构成最小树形图,因为必定存在两条从虚拟点出发的边
puts("impossible");
else
{ printf("%I64d %d\n",ans-sum,ansi-m);//利用i>=m时,第i条边的终点为i-m;这里不能替换为E[ansi].v-1;因为E[i]在朱刘算法过程中节点信息会变化。
}
puts("");
}
return 0;
}相关推荐
组态王通过以太网与西门子S7-200 SMART PLC通讯案例详解
通过以上步骤,我们成功实现了组态王与西门子S7-200 SMART PLC的以太网通讯。这一技术不仅提高了工业自动化系统的灵活性和可靠性,还为初学者提供了一个实用的学习案例。希望本文能帮助您快速掌握组态王与西门子S7-200 SMART PLC的通讯技术。如有任何疑问,欢迎留言讨论!
HDU2121(最小树形图的模版算法题)
这个道题也是在看了大神之后敲的,我也是刚刚学习这个 ^ _ ^,看来离大佬们的距离还是太远了:以下内容也是在学习大佬讲解的内容之后,根据大佬们的详细讲解中总结出来的! 贪心算法。可以想到每次都找每个点的入边中最小的一个来构成树,如果构成了,就是最小的。但是构成过程中可能会出现环,这时候就需要缩点。 而且因为每个点只选取一条入边,所以构成的环一定是简单环。 每次找到环以后需要更新权值,规则是这样的: 对于每条指向环的边,该边边权减去所指向点的最小入边。更新后继续找环,直到没有环即找到最小树形图。时间复杂度 O
hdu 2121 最小树形图 +虚根
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2121 题意: n个城市,m条单向边,每条边都有一个权值,现在要你求出这样一个节点,由这个节点出发能走遍所有的城市,同时使总权值最小。如果找不到就输出impossible,能的话输出最小权值和这个节点的编号。 做法: 最小树形图虚根的第一道题,因为不能确...
从原理图到PCB:Cadence Allegro 17.4网表同步全流程详解(含第三方网表配置)
本文详细解析了Cadence Allegro 17.4中从Orcad原理图到PCB布局的网表同步全流程。核心内容包括标准的第一方网表同步步骤,以及针对第三方网表导入时关键的封装库路径配置方法,并提供了常见同步错误的排查思路,帮助工程师高效、准确地完成设计数据传递,确保PCB设计顺利开局。
JavaSpringBoot + VUE 相关开发环境配置合集
1.Java环境-JDK安装 参照:Java基础1-环境篇:JDK安装与环境变量配置 Java基础1-环境篇:JDK安装与环境变量配置_第一段代码的博客-优快云博客_jdk 2.Web服务器-Tomcat安装 原创Java服务器Tomcat安装和配置 3.Maven(后面为了项目兼容性,使用了3.0.5版本) 原创Maven安装和配置(Maven3.0.5) 4.nginx 原创nginx轻量级Web服务器安装和配置 5 数据库mysql 原创数据库Mysql安装和配置 ...
hdu2121 最小树形图 (无根)
加入一个虚点 往每条边放入INF 这样的话 最多只有一条边会与他 相连 只需要记录一下第几个点是和虚点相连即可 注意!不查重比较简便! #include<iostream> #include<cstring> #define INF 0x3f3f3f3f using namespace std; const int N = 1100,M = 11000 + N; struct node{ int x,y,w; }a[M]; int dis[N][N]; int n,m
国科大学习资料--模式识别与机器学习(黄庆明)--期末复习题2(含答案)
国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) 国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) 国科大学习资料–模式识别与机器学习(黄庆明)–期末复习题2(含答案) ...
HDU -- 2121 【无定根的最小树形图】
传送门题意: 有n个点,有m条单向路,问这n个点组成最小树形图的最小花费 思路: 1:构造虚根最小树形图 因为是不定根,所以我们可以假设一个虚拟根,分别与n个点都有一条权值为r的虚边,假如我们把r设的非常大的话,我们求出来的值就可以判一下选了几条虚边, 如果有两条以上, 则这个图原来是不连通的.2:不含虚拟点的最小树形图的根节点 因为在缩点的时候我们需要给每一个点进行从
Unity大世界流式加载:工业级架构与优化秘籍
游戏大厂Unity大世界流式加载框架全景解析:从《原神》《和平精英》等标杆案例出发,深入剖析工业级流式加载的完整技术架构。文章系统介绍了大世界分区块管理、异步加载机制、资源优化策略、多平台适配方案,以及业务联动与团队协作流程。重点阐述了Addressable与AssetBundle应用、空间触发器设计、性能自适应等核心技术,并展望AI预测加载、云游戏等未来方向。全面展现了大厂如何通过流式加载技术实现无缝开放世界体验的技术路径与实践经验。
【YOLO11[基础]】分类任务的热力图可视化实践 | 论文必备 | 分类任务 | 即插即用 | 可选GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiR
【YOLO11[基础]】分类任务的热力图可视化实践 | 论文必备 | 分类任务 | 即插即用 | 可选GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiResCAM, LayerCAM, RandomCAM, EigenGradCAM等
HDU 2121 Ice_cream’s world II 无固定点的最小树形图 朱刘算法
/* 本题为不是固定根的最小树形图,我们可以虚拟出一根来,然后在把这个根跟每个点相连,相连的点可以设为无穷大,或者设为所有边和大一点,比如为r,然后就可以利用最小树形图进行计算了,计算出的结果减去r,如果比r还大就可以认为通过这个虚拟节点我们连过原图中两个点,即原图是不连通的,我
AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南
本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。
HDU 2121 Ice_cream’s world II(不定根最小树形图)
大概题意是找出一个点,以这个点为根的最小树形图权值和最小,输出最小树形图的权值以及点的编号。 不定根,所以我们要添加一个虚根...然后就是很多大牛说的方法了... 不过我一直很纳闷,我枚举每一个点为根求最小树形图..然后找出最小,这个一直WA,不明白为啥不是TLE,难道是模板问题?但是我的虚根是1或者n+1都是没问题,看起来不像是只能处理固定点的..求路过的大神解释一下.. #include
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
【转】【最小树形图】有向图的最小生成树【朱刘算法】
这篇文章挺好的。每行还有注释QAQ,kuangbin的模板里并没有万能节点; 万能节点好像是在不定根的时候的拓展。 要点: 1.求所有边权和sum; 2.以0点为万能节点向所有点建一条权值为sum的边; 3.记得sum++;保证比所有边权值总和大一点; 4.判断条件为(ans==-1||ans-sum>=sum) //ans-sum是除去虚根的最小树形图的最短路径,如果这个距...
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
最小树形图【有向图的最小生成树】
做了POJ的一道题,总是WA,不知道为什么,后来去看了,才知道,原来有向图的最小生成树与无向图不一样,它得是从某个点出发能遍历到其他所有点的才行,以此为条件,我们学习到了最小树形图。 与很多其他人的讲解不一样吧,我把我看了博客后自己的思路分享出来,关于什么是最小树形图。 我们知道的既然要建立最小树形图,就要理解什么是最小树形图,(概念好难懂啊,还是自己写的清楚明白),我们从某一点出...
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
HDU2121 Ice_cream’s world II【最小树形图】【不定根】
题目大意:一个国家有N个城市,M条有向道路,国王想要选一个城市为首都, 使得这个城市既能连接所有的城市,而且总的路程最短。若能找到这个城市,则 输出最短路程和城市编号。 思路:求有向图的最小树形图,不过根节点是不定的。虚拟一个根结点,到每个 结点都有一条边,其到每个结点的权值应该相等,表明每个结点都应该且都有机 会当根。且边的权值应比总权值大一些。如果最终算出的最小树形图的总权值大 于或等于 原图的总权值 + 虚根到实根(也就是原图的总权值),其实就是算出的最 小树形图的总权值大于或等于 原图总权值的二倍,
hdu 2121 无固定根的最小树形图
题目链接解析本题为不是固定根的最小树形图,我们可以虚拟出一根来,然后在把这个根跟每个点相连,相连的点可以设为无穷大,或者设为所有边和大一点,比如为r,然后就可以利用最小树形图进行计算了,计算出的结果减去r,如果比r还大就可以认为通过这个虚拟节点我们连过原图中两个点,即原图是不连通的,我们就可以认为不存在最小树形图。关于输出最小根也挺简单,在找最小入弧时,如果这条弧的起点是虚拟根,那么这条弧的终点就是
HDU-2121(朱刘算法优化版+虚根处理无根树形图)
hdu2121 #include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 1010; const int MAXM = 10005; struct Edge{ int u, v, cost; }edge[MAXM];//用链表存图比原始用矩阵快些 int ...
HDU2121 Ice_cream’s world II 【最小树形图】+【不定根】
Ice_cream’s world II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2744 Accepted Submission(s): 630 Problem Description After
HDU 6141 最小树形图
题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=6141 题意: N个点M条边求最大树形图,还问权值最大的图中第N个点的父亲编号最小能是多少 规模:N<=1e3,M<=1e4N <= 1e3, M <= 1e4 类型:最小树形图 边权处理 分析: 最开始做的时候用最小费用流,但会超时 原来是最小树形图 这里第N个点的边权,按其u的序号
hdu 2121
题意: 有向图的最小生成树(只管出去,不管回来) 标准的模板啊, 设置一个虚拟节点n 权值是max+1; 代码是对这别人的打的,第一次不会写!#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define N 1010 #define inf 101000000 struct edg {
hdu 2121 (不定根的最小树形图)
Ice_cream’s world II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6285 Accepted Submission(s): 1636 Problem Description After awarde...
hdu2121
/* 分析: 无定根的最小树形图。 虚拟出一个root,到每个node都有一条边,其权值>整张map中的边的权值和。 至于这个题,当最小树形图的权值相等时,要选择node编号最小的city作为中心这 点,代码行45可以得到所需index,因为在找最小的in的时候,我们是按照边的编号从小 到大遍历的,且在加入虚拟root到city的边的时候,也是按照city编号的
Hdu 2121 Ice_cream’s world II 无根最小树形图
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2121
Ice_cream’s world II HDU - 2121 最小树形图
https://vjudge.net/contest/179107#problem/B参考https://vjudge.net/solution/3192331这个地方的超级源点很妙。。。int n,m,idx,maxx; int pre[mxn],id[mxn],vis[mxn],in[mxn],tot; struct edge{ int u,v,w; }e[mxe]; void add(
2004



被折叠的 条评论
为什么被折叠?



