hdu 2121无根最小树形图要建一个虚拟节点
来源:互联网 发布:联想传奇电子教室软件 编辑:程序博客网 时间:2024/05/21 10:57
#include<stdio.h>#include<string.h>#define inf 999999999#define N 1100struct 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;}
0 0
- hdu 2121无根最小树形图要建一个虚拟节点
- HDU 2121 无固定根的最小树形图
- hdu 2121(无根最小树形图)
- hdu 2121 无固定根的最小树形图
- HDU-2121-无根(不定根)最小树形图模板
- hdoj 2121 Ice_cream’s world II 【无根节点最小树形图】
- HDU 2121 Ice_cream’s world II(无固定根最小树形图、找最小根)
- HDU 2121 无固定点的最小树形图
- HDU 4966 GGS-DDU(无固定根最小树形图)
- Hdu 2121 Ice_cream’s world II 无根最小树形图
- hdu 2121 Ice_cream’s world II(无固定根最小树形图)
- hdu 2121 Ice_cream’s world II(无根结点最小树形图)
- HDU 2121 Ice_cream’s world II 无固定点的最小树形图 朱刘算法
- hdu 4009 Transfer water(无固定根最小树形图)
- hdu 4966 GGS-DDU(无固定根的最小树形图)
- HDU 4009 Transfer water(无固定根最小树形图)
- hdu 2121(没有固定根的最小树形图)
- HDU -- 2121 【无定根的最小树形图】
- Java NIO系列教程(十二) Java NIO与IO
- 详解操作主机角色,Active Directory系列之九
- 安卓使用HttpClient进行Http Post文件上传
- [LeetCode] Binary Tree Level Order Traversal
- codeforce 445 A
- hdu 2121无根最小树形图要建一个虚拟节点
- Active Directory的复制拓扑,Active Directory系列之八
- 分数表示法
- 移动磁盘显示盘符但无法打开,提示格式化
- linux 分卷压缩命令
- Active Directory的脱机碎片整理,Active Directory系列之七
- c/c++ extern 关键字
- 离线部署额外域控制器,Active Directory系列之六
- jquery中find,children,contents的区别