题目大意:给一张无向图,求出最小树形图。

题目分析:套朱-刘算法模板就行了。。。

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;
# define LL long long
# define REP(i,s,n) for(int i=s;i<n;++i)
# define CL(a,b) memset(a,b,sizeof(a))
# define CLL(a,b,n) fill(a,a+n,b) const int N=1005;
const int INF=1<<30;
struct Edge
{
int fr,to,w;
};
Edge e[N*40];
int vis[N],ID[N],pre[N],in[N],n,m; int zhu_liu(int root,int nv,int ne)
{
int res=0;
while(1)
{
CLL(in,INF,nv);
REP(i,0,ne) if(e[i].fr!=e[i].to&&in[e[i].to]>e[i].w){
in[e[i].to]=e[i].w;
pre[e[i].to]=e[i].fr;
}
in[root]=0;
REP(i,0,nv) if(in[i]==INF) return -1;
int nodeCnt=0;
CL(ID,-1);
CL(vis,-1);
REP(i,0,nv){
res+=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]=nodeCnt;
ID[v]=nodeCnt++;
}
}
if(nodeCnt==0) break;
REP(i,0,nv) if(ID[i]==-1) ID[i]=nodeCnt++;
REP(i,0,ne){
int v=e[i].to;
e[i].fr=ID[e[i].fr];
e[i].to=ID[e[i].to];
if(e[i].fr!=e[i].to)
e[i].w-=in[v];
}
nv=nodeCnt;
root=ID[root];
}
return res;
} int main()
{
int T,cas=0;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
REP(i,0,m)
{
scanf("%d%d%d",&e[i].fr,&e[i].to,&e[i].w);
}
int ans=zhu_liu(0,n,m);
printf("Case #%d: ",++cas);
if(ans<0)
printf("Possums!\n");
else
printf("%d\n",ans);
}
return 0;
}

  

UVA-11183 Teen Girl Squad (最小树形图、朱刘算法模板)的更多相关文章

  1. poj3164(最小树形图&朱刘算法模板)

    题目链接:http://poj.org/problem?id=3164 题意:第一行为n, m,接下来n行为n个点的二维坐标, 再接下来m行每行输入两个数u, v,表点u到点v是单向可达的,求这个有向 ...

  2. UVA 11183 Teen Girl Squad 最小树形图

    最小树形图模板题 #include <iostream> #include <algorithm> #include <cstdio> #include <c ...

  3. 最小树形图——朱刘算法(Edmonds)

    定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入 ...

  4. POJ 3164 Command Network ( 最小树形图 朱刘算法)

    题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...

  5. POJ 3164 Command Network 最小树形图 朱刘算法

    =============== 分割线之下摘自Sasuke_SCUT的blog============= 最 小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T, ...

  6. 最小树形图--朱刘算法([JSOI2008]小店购物)

    题面 luogu Sol 首先设一个 \(0\) 号点,向所有点连边,表示初始价值 显然这个图的一个 \(0\) 为根的最小有向生成树的边权和就是每个买一次的最小价值 再买就一定能优惠(包含 \(0\ ...

  7. 洛谷P4716 【模板】最小树形图(朱刘算法)

    题意 题目链接 Sol 朱刘算法?感觉又是一种神仙贪心算法 大概就是每次贪心的用每个点边权最小的入边更新答案,如果不行的话就缩起来找其他的边 不详细说了,丢链接走人.. #include<bit ...

  8. POJ - 3164-Command Network 最小树形图——朱刘算法

    POJ - 3164 题意: 一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 题目就是求这个最小的树形图. 参考资料:https://blog.csdn.net/ ...

  9. bzoj 4349 最小树形图——朱刘算法

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4349. 学习博客:http://www.cnblogs.com/xzxl/p/7243466 ...

随机推荐

  1. XPipe 解决什么问题

    x-pipe/README.md at master · ctripcorp/x-pipe https://github.com/ctripcorp/x-pipe/blob/master/README ...

  2. Python爬虫基础(三)urllib2库的高级使用

    Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,其中urlopen是模块默认构建的opener. 但是基本的urlopen()方法不 ...

  3. 爬虫基础 - Robots协议

    Robots协议 指定一个robots.txt文件,告诉爬虫引擎怎么爬取 https://www.taobao.com/robots.txt User-agent: Baiduspider Allow ...

  4. MySQL 的mysqldump备份

    MySQL 的mysqldump备份 来自<mysql技术内幕 innodb存储引擎> --single-transaction:只对innodb表有效 --lock-tables:对My ...

  5. node-schedule 实现定时任务使用方法记录

    在项目中有个每天0点执行的函数,本来想用setInterval来实现,但觉得这种需求以后应该还会有,自己写可能拓展性不高.搜了一下发现了node-schedule这个包.现在记录一下使用方法 node ...

  6. Office 2003 2007 2010 配置进度 正在配置 解决方案 (转载)

    在安装过Office2003.2007 或者2010之后,如果没有选择全部的组件,或者是因为安装到非系统盘,有时候打开 Office 文档的时候就会出现正在配置Office,或者Office配置进度的 ...

  7. sysbench压测mysql基本步骤

    MySQL数据库测试 select   1.先创建数据库test,再准备数据 time /usr/local/sysbench/bin/sysbench --test=oltp --num-threa ...

  8. Django组件拾忆

    知识预览 一 Django的form组件 二 Django的model form组件 三 Django的缓存机制 四 Django的信号 五 Django的序列化 回到顶部 一 Django的form ...

  9. (24)如何使用HttpClient

    介绍 HttpClient是HTTP客户端的接口.HttpClient封装了各种对象,处理cookies,身份认证,连接管理等. 概念 HttpClient的使用一般包含下面6个步骤: 创建 Http ...

  10. linux centos7 erlang rabbitmq安装

    最终的安装目录为/opt/erlang 和 /opt/rabbitmq wget http://erlang.org/download/otp_src_21.0.tar.gztar zxvf otp_ ...