struct node
{
int now,nex,dis;
node(int now,int nex,int dis):
now(now),nex(nex),dis(dis) {}
node(){}
} edge[40005];
int in[1005],id[1005],pre[1005],color[1005];
int mintreegraph(int n,int m,int root)
{
int ans=0;
while(1)
{
for(int i=1; i<=n; i++)
in[i]=inf;
for(int i=1; i<=m; i++)
{
int now=edge[i].now,nex=edge[i].nex;
if(now!=nex && edge[i].dis<in[nex])
pre[nex]=now,in[nex]=edge[i].dis;
}
in[root]=0;
for(int i=1; i<=n; i++)
if(in[i]==inf)return -1;
int cont=0;
memset(color,0,sizeof(color));
memset(id,0,sizeof(id));
for(int i=1; i<=n; i++)
{
ans+=in[i];
int x=i;
while(color[x]!=i && !id[x] && x!=root)
color[x]=i,x=pre[x];
if(!id[x] && x!=root)
{
cont++;
while(!id[x])id[x]=cont,x=pre[x];
}
}
if(!cont)return ans;
for(int i=1; i<=n; i++)
if(!id[i])id[i]=++cont;
for(int i=1; i<=m; i++)
{
int now=edge[i].now,nex=edge[i].nex;
edge[i].now=id[now],edge[i].nex=id[nex];
if(now!=nex)edge[i].dis-=in[nex];
}
n=cont,root=id[root];
}
}
最小树形图
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 模板题 . UVA--- 11183传送 还有这道 POJ 3164 点这传送 举个例子:某个图的部分图中, 1...
- 这篇依旧是关于26 个世界级产品经理经验分享。上一期分享是否有解答你在创业公司战略制定方面的困惑呢? 在讨论本期...
- 需求:广告图100%宽度,最小宽度1920,图片居中显示jQuery问题:浏览器可视宽度小于1920时,图片无法水...