【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=6141

【题目大意】

  给出一个有向图,求1点为根的最小树形图使得第n个点的直接父亲编号最小

【题解】

  如果没有第n个点直接父亲编号最小的要求,
  那么只要跑一遍朱刘算法即可,考虑到直接父亲最小的条件,
  我们连向第n个点的所有边进行加权操作,
  使得其在总边权相同的情况选取答案具有优先性

【代码】

#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=1010,M=10010;
const LL INF=0x3f3f3f3f3f3f3f3f;
int ROOT;
struct DMST{
int n,size,pre[N],id[N],vis[N];
LL in[N];
struct EDGE{
int u,v; LL cost;
EDGE(){}
EDGE(int a,int b,int c):u(a),v(b),cost(c){}
}E[M];
void init(int _n){n=_n,size=0;}
void add(int u,int v,int w){E[size++]=EDGE(u,v,w);}
LL dmst(int root){
int u,v,cnt;
LL ret=0;
while(1){
for(int i=0;i<n;i++)in[i]=INF;
for(int i=0;i<size;i++){
u=E[i].u,v=E[i].v;
if(E[i].cost<in[v]&&u!=v){
pre[v]=u,in[v]=E[i].cost;
if(u==root)ROOT=i;
}
}
for(int i=0;i<n;i++)if(i!=root&&in[i]==INF)return -1;
cnt=in[root]=0;
for(int i=0;i<n;i++)id[i]=vis[i]=-1;
for(int i=0;i<n;i++){
ret+=in[i],v=i;
while(vis[v]!=i&&id[v]==-1&&v!=root)vis[v]=i,v=pre[v];
if(v!=root&&id[v]==-1){
for(u=pre[v];u!=v;u=pre[u])id[u]=cnt;
id[v]=cnt++;
}
}
if(!cnt)break;
for(int i=0;i<n;i++)if(id[i]==-1)id[i]=cnt++;
for(int i=0;v=E[i].v,i<size;i++){
E[i].u=id[E[i].u],E[i].v=id[E[i].v];
if(E[i].u!=E[i].v)E[i].cost-=in[v];
}n=cnt,root=id[root];
}return ret;
}
}U;
int T,n,m;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
U.init(n);
while(m--){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
z*=1000; if(y==n)z+=n-x;
U.add(x-1,y-1,-z);
}LL ans=-U.dmst(0);
int fa=n-ans%1000;
ans/=1000;
printf("%lld %d\n",ans,fa);
}return 0;
}

HDU 6141 I am your Father!(最小树形图)的更多相关文章

  1. HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8

    思路来自 FXXL 最小树形图模板用kuangbin的 /* HDU 6141 - I am your Father! [ 最小树形图 ] | 2017 Multi-University Traini ...

  2. HDU 6141 I am your Father!(最小树形图+权值编码)

    http://acm.hdu.edu.cn/showproblem.php?pid=6141 题意: 求最大树形图. 思路: 把边的权值变为负值,那么这就是个最小树形图了,直接套模板就可以解决. 有个 ...

  3. hdu 6141 I am your Father!

    题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6141 (2017 Multi-University Training Contest - Team ...

  4. HDU 2121 Ice_cream’s world II 最小树形图 模板

    开始学习最小树形图,模板题. Ice_cream’s world II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32 ...

  5. HDU 2121 Ice_cream’s world II 最小树形图

    这个题就是需要求整个有向带权图的最小树形图,没有指定根,那就需要加一个虚根 这个虚根到每个点的权值是总权值+1,然后就可以求了,如果求出来的权值大于等于二倍的总权值,就无解 有解的情况,还需要输出最根 ...

  6. hdu 3072 有向图缩点成最小树形图计算最小权

    题意,从0点出发,遍历所有点,遍历边时候要付出代价,在一个SCC中的边不要付费.求最小费用. 有向图缩点(无需建立新图,,n<=50000,建则超时),遍历边,若不在一个SCC中,用一个数组更新 ...

  7. HDU 2121——Ice_cream’s world II——————【最小树形图、不定根】

    Ice_cream’s world II Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

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

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

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

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

随机推荐

  1. 【leetcode 简单】第十一题 搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...

  2. Linux下文本浏览器lynx

    一般登录到Linux上的时候都是使用Shell登录上去的,但是如果这个时候我们有浏览网页的需求怎么办,比如我刚刚部署上去一个网站,但是我并不知道我有没有部署成功,而且只能在这一台Linux上能够访问到 ...

  3. JSP分页之结合Bootstrap分页插件进行简单分页

    结合Bootstrap的分页插件实现分页,其中策略是每次显示5个按钮,然后根据当前页的不同来进行不同的显示: 1. 当前页<3,如果当前页大于5页就显示前五页,不然就显示1~totalPage. ...

  4. Linux 官方镜像源汇总

    原文链接   参考链接 1.企业贡献:阿里云开源镜像站: http://mirrors.aliyun.com 搜狐开源镜像站:http://mirrors.sohu.com网易开源镜像站:http:/ ...

  5. zedboard学习记录.2.PS+PL 流水灯与uart

    1.建立一个工程. 硬件设计 2.IP integrator -> create block desgin;Run Block Automation. 3.add IP -> AXI GP ...

  6. discuz 积分按日重新计算,(摒弃以前24小时计算)

    修改\source\module\forum\forum_misc.php将 foreach(C::t('forum_ratelog')->fetch_all_sum_score($_G['ui ...

  7. python并发编程之Queue线程、进程、协程通信(五)

    单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...

  8. 343.Integer Break---dp

    题目链接:https://leetcode.com/problems/integer-break/description/ 题目大意:给定一个自然数,将其分解,对其分解的数作乘积,找出最大的乘积结果. ...

  9. ASP连接读写ACCESS数据库实例(转)

    (一)   数据库的选择:有许多的数据库你可以选择,SQL SERVER.ACCESS(*.mdb).EXCEL(*.xls).FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以达到存储 ...

  10. HDU 2859 Phalanx(二维DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 题目大意:对称矩阵是这样的矩阵,它由“左下到右”线对称. 相应位置的元素应该相同. 例如,这里是 ...