hdu 2121
来源:互联网 发布:阿佳妮玛戈皇后知乎 编辑:程序博客网 时间:2024/06/04 19:40
本题为无固定根的最小树形图
#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>#define N 1010#define M 20010#define inf 100000000using namespace std;int a[N],b[N],c[N];int in[N],pre[N],id[N],vis[N];struct Edge{ int u,v,w;}edge[M];int m,n,ansi;int Directed_MST(int root){ int ret=0,i; while(1){ for(i=0;i<=n;i++)in[i]=inf; for(i=0;i<m;i++){ int u=edge[i].u,v=edge[i].v; if(edge[i].w<in[v] && u!=v){ pre[v]=u; in[v]=edge[i].w; if(u==root) ansi=i; //这里确定了虚拟根节点的出边,假设有k个点都可以做真正根节点,那么最后这k个点一定在一个环里 } } in[root]=0; for(i=0;i<=n;i++) if(in[i]==inf)return -1; int node=0; memset(id,-1,sizeof(id)); memset(vis,-1,sizeof(vis)); for(i=0;i<=n;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]=node; id[v]=node++; } } if(node==0)break; for(i=0;i<=n;i++) if(id[i]==-1) id[i]=node++; for(i=0;i<m;i++){ int 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].w-=in[v]; } n=node-1; root=id[root]; } return ret;}int main(){ int i,j,sum,vv,e; int u,v,w; while(scanf("%d %d",&vv,&e)==2){ sum=1; for(i=0;i<e;i++){ scanf("%d %d %d",&u,&v,&w); u++,v++; edge[i].u=u,edge[i].v=v,edge[i].w=w; sum+=w; } for(i=0;i<vv;i++) edge[i+e].u=0,edge[i+e].v=i+1,edge[i+e].w=sum; m=vv+e,n=vv; int ans=Directed_MST(0); if(ans>sum*2)printf("impossible\n\n"); else printf("%d %d\n\n",ans-sum,ansi-e); }}
- hdu 2121
- hdu 2121
- hdu 2121
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- 网络流之--最小点权覆盖和最大点权独立集
- js对象的理解(转载)
- ibatis2.0知识点
- 开发一个调试JSP的Eclipse插件
- Light OJ 1303——Basic Data Structure
- hdu 2121
- #驱动任意COM接口的小票机(POS热敏打印机)
- 焦散
- PHP 判断变量的类型总结
- 图的遍历 之 广度优先搜索
- JSP+JDBC实现简单用户登录模块【Deprecated】
- 全球IT报告|中国“最勤奋”
- c++强制类型转换
- 微软反盗版全球黑屏|中国成惟一例外