#include<stdio.h>
#include<string.h>
#define inf 999999999
#define N 1100
struct node {
int u,v,w;
}edge[11000];
int visit[N],dis[N],id[N],pre[N],yong,n,index;
void addedge(int u,int v,int w){
edge[yong].u=u;
edge[yong].v=v;
edge[yong++].w=w;
}
int zhuliu(int root) {//朱刘算法模板
int sum=0;
n++;
while(1) {
int i;
for(i=0;i<n;i++)
dis[i]=inf;
memset(id,-1,sizeof(id));
memset(visit,-1,sizeof(visit));
for(i=0;i<yong;i++) {
int u=edge[i].u,v=edge[i].v;
if(dis[v]>edge[i].w&&u!=v){
pre[v]=u;
dis[v]=edge[i].w;
if(u==root)//记录最后与根节点连接的边
index=i;
}
}
pre[root]=root;
dis[root]=0;
for(i=0;i<n;i++) {
if(i==root)continue;
if(dis[i]==inf)return -1;
sum+=dis[i];
}
int res=0;
for(i=0;i<n;i++)
if(visit[i]==-1) {
int v=i;
while(visit[v]==-1) {
visit[v]=i;
v=pre[v];
}
if(visit[v]!=i||v==root)
continue;
int u;
for(u=pre[v];u!=v;u=pre[u])
id[u]=res;
id[v]=res++;
}
if(res==0)
return sum;
for(i=0;i<n;i++) {
if(id[i]==-1)
id[i]=res++;
}
for(i=0;i<yong;i++) {
edge[i].w-=dis[edge[i].v];
edge[i].u=id[edge[i].u];
edge[i].v=id[edge[i].v];
}
n=res;root=id[root];
}
return sum;
}
int main(){
int m,i,j,k,maxx,mm;
while(scanf("%d%d",&n,&m)!=EOF) {
yong=0;
maxx=0;
mm=m;//记录m
while(m--) {
scanf("%d%d%d",&i,&j,&k);
maxx+=k;//记录最大值
addedge(i,j,k);
}
maxx++;//增1
for(i=0;i<n;i++)//会记录第几次加入的边
addedge(n,i,maxx);//建立一个虚拟节点
k=zhuliu(n);
if(k==-1||k-maxx>=maxx)
printf("impossible\n");
else
printf("%d %d\n",k-maxx,index-mm);//实际上的根节点是减去m
printf("\n");
}
return 0;
}

hdu 2121无根最小树形图要建一个虚拟节点的更多相关文章

  1. HDU - 2121 Ice_cream’s world II 无根最小树形图

    HDU - 2121 :http://acm.hdu.edu.cn/showproblem.php?pid=2121 比较好的朱刘算法blog:https://blog.csdn.net/txl199 ...

  2. hdu 2121 , hdu 4009 无定根最小树形图

    hdu 2121 题目:给出m条有向路,根不确定,求一棵最小的有向生成树. 分析:增加一个虚拟节点,连向n个节点,费用为inf(至少比sigma(cost_edge)大).以该虚拟节点为根求一遍最小树 ...

  3. HDU ACM 2121 Ice_cream’s world II (无根最小树形图)

    [解题思路]这题先看了NotOnlySuccess的解题思路,即设置虚根再处理的做法:弄了一个上午,再次有种赶脚的感觉~~如果需要找出为什么需要去比所有权值之和更大的数为新增的虚边的话,一开始我理解仅 ...

  4. hdu 2121 Ice_cream’s world II (无定根最小树形图)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2121 题目大意: 有n个点,有m条单向路,问这n个点组成最小树形图的最小花费. 解题思路: 1:构造 ...

  5. HDU 4009 Transfer water 最小树形图

    分析:建一个远点,往每个点连建井的价值(单向边),其它输水线按照题意建单向边 然后以源点为根的权值最小的有向树就是答案,套最小树形图模板 #include <iostream> #incl ...

  6. HDU 4966 GGS-DDU(最小树形图)

    n个技能,每个技能有0-a[i]的等级,m个课程,每个课程需要前置技能c[i]至少达到lv1[i]等级,效果是技能d[i]达到lv2[i]等级,花费w[i]. 输出最小花费使得全技能满级(初始全技能0 ...

  7. HDU 3820 Golden Eggs( 最小割 奇特建图)经典

    Golden Eggs Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. hdu 2121

    朱刘算法求无根最小树形图 可以任意选一个根,求最小的权和以及当时的根. 先建一个超级根,它连向所有点,边权为所有边的边权和加1(即sumw+1),然后求以它为根的最小树形图,再根据树形图权和与2*(s ...

  9. HDU 2121 Ice_cream’s world II 不定根最小树形图

    题目链接: 题目 Ice_cream's world II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...

随机推荐

  1. java的list类

    java的list类 目录: list中添加,获取,删除元素: list中是否包含某个元素: list中根据索引将元素数值改变(替换): list中查看(判断)元素的索引: 根据元素索引位置进行的判断 ...

  2. 关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案

    关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案 目录 关于api-ms-win-crt-runtimel1-1-0dll缺失的解决方案 目录 安装VC redite ...

  3. Struts2 中 result type=”json” 的参数解释

    转自:http://wangquanhpu.iteye.com/blog/1461750 1, ignoreHierarchy 参数:表示是否忽略等级,也就是继承关系,比如:TestAction 继承 ...

  4. [Apple开发者帐户帮助]六、配置应用服务(3)创建地图标识符和私钥

    要与MapKit JS通信,您将使用Maps私钥对一个或多个开发人员令牌进行签名. 首先注册地图标识符以识别您的应用.为使用MapKit JS的每个应用注册地图标识符.接下来创建并下载启用了MapKi ...

  5. CodeForces A. Meeting of Old Friends

    2019-05-30 20:19:57 加油!!! sort(a + 1, a + 5); 卡了一会儿 #include <bits/stdc++.h> using namespace s ...

  6. MySQL安装for windows

    ======MySQL安装 for windows====== 版本5.7.X MySQL服务器帮助我们来管理文件的操作 MySQL软件 - 服务器端软件 - 服务端程序 - 解析指令 - 对文件的操 ...

  7. BZOJ 2431 逆序对数列 DP

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Description 对于一个数列{ai},如果有i< j且ai> ...

  8. 苹果html上传后图片旋转问题

    最近做移动web项目但是遇到在苹果设备上html上传图片后,图片传到后台是旋转的 旋转角度不一,因此再次 读取照片时,无法正常显示,目前已经找到解决方法,至于原因看不太懂 翻译过来也是完全按照单词翻译 ...

  9. 团队作业-Beta版本发布

    这个作业属于哪个课程  <课程的链接>            这个作业要求在哪里 <作业要求的链接> 团队名称 Three cobblers 这个作业的目标 Beta版本发布报 ...

  10. php正则表达式应用

    正则表达式 1.替换“/\d/”,“#”,$str:正则表达式\d 数字,替换为#,字符串 $str = "2hello 5li 6lei"; echo preg_replace( ...