HDU 6141 I am your Father!(最小树形图)
【题目链接】 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!(最小树形图)的更多相关文章
- HDU 6141 - I am your Father! | 2017 Multi-University Training Contest 8
思路来自 FXXL 最小树形图模板用kuangbin的 /* HDU 6141 - I am your Father! [ 最小树形图 ] | 2017 Multi-University Traini ...
- HDU 6141 I am your Father!(最小树形图+权值编码)
http://acm.hdu.edu.cn/showproblem.php?pid=6141 题意: 求最大树形图. 思路: 把边的权值变为负值,那么这就是个最小树形图了,直接套模板就可以解决. 有个 ...
- hdu 6141 I am your Father!
题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6141 (2017 Multi-University Training Contest - Team ...
- HDU 2121 Ice_cream’s world II 最小树形图 模板
开始学习最小树形图,模板题. Ice_cream’s world II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32 ...
- HDU 2121 Ice_cream’s world II 最小树形图
这个题就是需要求整个有向带权图的最小树形图,没有指定根,那就需要加一个虚根 这个虚根到每个点的权值是总权值+1,然后就可以求了,如果求出来的权值大于等于二倍的总权值,就无解 有解的情况,还需要输出最根 ...
- hdu 3072 有向图缩点成最小树形图计算最小权
题意,从0点出发,遍历所有点,遍历边时候要付出代价,在一个SCC中的边不要付费.求最小费用. 有向图缩点(无需建立新图,,n<=50000,建则超时),遍历边,若不在一个SCC中,用一个数组更新 ...
- HDU 2121——Ice_cream’s world II——————【最小树形图、不定根】
Ice_cream’s world II Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...
- hdu 2121 Ice_cream’s world II (无定根最小树形图)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2121 题目大意: 有n个点,有m条单向路,问这n个点组成最小树形图的最小花费. 解题思路: 1:构造 ...
- HDU - 2121 Ice_cream’s world II 无根最小树形图
HDU - 2121 :http://acm.hdu.edu.cn/showproblem.php?pid=2121 比较好的朱刘算法blog:https://blog.csdn.net/txl199 ...
随机推荐
- 【Atcoder】AGC 020 B - Ice Rink Game 递推
[题意]n个人进行游戏,每轮只保留最大的a[i]倍数的人,最后一轮过后剩余2人,求最小和最大的n,或-1.n<=10^5. [算法]递推||二分 [题解]令L(i),R(i)表示第i轮过后的最小 ...
- JQuery的链式编程,隐式迭代是啥意思?
链式编程 1.好处 "一句话,链式编程可以省去很多重复的代码." 这话什么意思呢?举个例子. /*设置obj对象的两个属性*/ //普通做法是这样的 obj.name = '小明' ...
- spring-boot支持websocket
spring-boot本身对websocket提供了很好的支持,可以直接原生支持sockjs和stomp协议.百度搜了一些中文文档,虽然也能实现websocket,但是并没有直接使用spring-bo ...
- 利用media query写响应式布局
最近才接触到响应式布局的概念,之前用到的bootstrap就是一种响应式布局的框架.学习的时候参考了http://blog.csdn.net/shoyer/article/details/829301 ...
- C.Fountains(Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)+线段树+RMQ)
题目链接:http://codeforces.com/contest/799/problem/C 题目: 题意: 给你n种喷泉的价格和漂亮值,这n种喷泉题目指定用钻石或现金支付(分别用D和C表示),C ...
- 2017 ACM暑期多校联合训练 - Team 4 1012 HDU 6078 Wavel Sequence (模拟)
题目链接 Problem Description Have you ever seen the wave? It's a wonderful view of nature. Little Q is a ...
- PHP对象3: public / private / protected
<?php /* public 可继承, 内外可访问 private 不可, 只内部访问 protected 可继承, 只内部 */ class A{ protected $name; priv ...
- Cesium 初始化Viewer
<pre name="code" class="javascript"><script> var viewer = new Cesium ...
- 无状态Http
无状态的根本原因 浏览器和服务器使用socket通信,服务器将请求结果返回给浏览器后,会关闭当前socket连接.而且服务器会在处理页面完毕后销毁页面对象. 应用层面的原因 浏览器和服务器之间通信都遵 ...
- Java web项目中新建maven项目出现的问题
1.首先新建maven项目,新建Maven时出现了版本问题,报错 第一个错误:jdk版本与project facets不匹配(大概是这样,忘记截图了),那么解决办法是: 在项目右击--->Pro ...