HDU - 2121 Ice_cream’s world II 无根最小树形图
HDU - 2121 :http://acm.hdu.edu.cn/showproblem.php?pid=2121
比较好的朱刘算法blog:https://blog.csdn.net/txl199106/article/details/62045479
题意:
在一个有向图中,找一个点,使得这个点到其他点的距离和最小,输出距离和,和这个点的坐标。
思路:
无根最小树形图,设所有的有向图的距离和为sum。自己建立一个虚拟的原点(n+1),向每一个节点连一条距离为sum+1的边。以n+1为根结点跑一遍最小树形图(复杂度O(VE)),如果求出的ans == -1 或者 ans >=2*(sum + 1),无解,因为这么大的ans,只可能用了两条我们自己建立的边。由于每条边的端点在跑最小树形图的时候会改变,所以记录这是第几条边rtt,结果就是rtt - m,代码中由减了1是因为原图是Base0的。
/*
* @Author: chenkexing
* @Date: 2018-09-05 11:05:14
* @Last Modified by: chenkexing
* @Last Modified time: 2018-09-10 20:21:22
*/
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <list>
#include <map>
#include <set>
#include <cassert>
using namespace std;
//#pragma GCC optimize(3)
//#pragma comment(linker, "/STACK:102400000,102400000") //c++
#define lson (l , mid , rt << 1)
#define rson (mid + 1 , r , rt << 1 | 1)
#define debug(x) cerr << #x << " = " << x << "\n";
#define pb push_back
#define pq priority_queue typedef long long ll;
typedef unsigned long long ull; typedef pair<ll ,ll > pll;
typedef pair<int ,int > pii;
typedef pair<int,pii> p3; //priority_queue<int> q;//这是一个大根堆q
//priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
#define fi first
#define se second
//#define endl '\n' #define OKC ios::sync_with_stdio(false);cin.tie(0)
#define FT(A,B,C) for(int A=B;A <= C;++A) //用来压行
#define REP(i , j , k) for(int i = j ; i < k ; ++i)
//priority_queue<int ,vector<int>, greater<int> >que; const ll mos = 0x7FFFFFFF; //
const ll nmos = 0x80000000; //-2147483648
const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f; //
const int mod = 1e9+;
const double esp = 1e-;
const double PI=acos(-1.0); template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} /*-----------------------showtime----------------------*/
const int maxm = ;
const int maxn = ;
struct Edge
{
int from,to,c;
}e[maxm];
int in[maxn],vis[maxn],pre[maxn],id[maxn];
int rtt;
int zhuliu(int root,int n,int m){
int res = ;
while(true){
memset(in, inf, sizeof(in));
for(int i=; i<=m; i++){
if(e[i].from != e[i].to && e[i].c < in[e[i].to]){
pre[e[i].to] = e[i].from;
in[e[i].to] = e[i].c;
if(e[i].from == root)rtt = i;
}
}
for(int i=; i<=n; i++){
if(i!=root&&in[i] == inf)
return -;
}
int tn = ,v;
memset(id,-,sizeof(id));
memset(vis,-,sizeof(vis)); in[root] = ;
for(int i=; i<=n; i++){
res += in[i];
v = i;
while(v !=root && id[v] == - && vis[v] != i){
vis[v] = i;
v = pre[v];
}
if(v!=root && id[v] == -){
id[v] = ++tn;
for(int u = pre[v]; u!=v; u = pre[u]){
id[u] = tn;
}
}
}
if(tn == )break;
for(int i=; i<=n; i++){
if(id[i] == -)id[i] = ++tn;
} for(int i=; i<=m; i++){
int v = e[i].to;
e[i].to = id[e[i].to];
e[i].from = id[e[i].from];
if(e[i].to != e[i].from){
e[i].c -= in[v];
}
} n = tn;root = id[root];
}
return res; }
int main(){
int n,m,r;
while(~scanf("%d%d", &n, &m))
{
int sum = ;
for(int i=; i<=m; i++){
int u,v,c;
scanf("%d%d%d", &u, &v, &c);
u++,v++;
e[i].from = u;e[i].to = v;
e[i].c = c;
sum += c;
}
sum++;
for(int i=m+; i<=n+m; i++){
e[i].from = n+;
e[i].to = i-m;
e[i].c = sum;
} int ans = zhuliu(n+,n+,n+m);
// debug(ans);
if(ans == - || ans - sum >= sum){
puts("impossible");
}
else {
printf("%d %d\n", ans - sum, rtt - m - );
}
printf("\n");
} return ;
}
HDU - 2121
HDU - 2121 Ice_cream’s world II 无根最小树形图的更多相关文章
- 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 不定根最小树形图
题目链接: 题目 Ice_cream's world II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- HDU ACM 2121 Ice_cream’s world II (无根最小树形图)
[解题思路]这题先看了NotOnlySuccess的解题思路,即设置虚根再处理的做法:弄了一个上午,再次有种赶脚的感觉~~如果需要找出为什么需要去比所有权值之和更大的数为新增的虚边的话,一开始我理解仅 ...
- 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
Ice_cream’s world II http://acm.hdu.edu.cn/showproblem.php?pid=2121 Time Limit: 3000/1000 MS (Java/O ...
- 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 最小树形图
这个题就是需要求整个有向带权图的最小树形图,没有指定根,那就需要加一个虚根 这个虚根到每个点的权值是总权值+1,然后就可以求了,如果求出来的权值大于等于二倍的总权值,就无解 有解的情况,还需要输出最根 ...
- hdu 2121无根最小树形图要建一个虚拟节点
#include<stdio.h> #include<string.h> #define inf 999999999 #define N 1100 struct node { ...
- hdoj 2121 Ice_cream’s world II 【没有最低树的根节点】
称号:pid=2121" target="_blank">hdoj 2121 Ice_cream's world II 题意:题目是一道躶题,给n个点,m条边的有向 ...
随机推荐
- C语言编程入门之--第四章C语言基本数据类型
导读:C语言程序中经常涉及一些数学计算,所以要熟悉其基本的数据类型.数据类型学习起来比较枯燥,不过结合之前的内存概念,以及本节的字节概念,相信数据类型也就不难理解了.本章从二进制的基本概念开始,然 ...
- 入门MySQL——架构篇
前言: 上篇文章我们介绍了入门MySQL的基本概念,看完上篇文章,相信你应该了解MySQL的前世今生了吧.本篇文章将带你从架构体系来学习MySQL.我认为学习MySQL架构体系应该是入门阶段必须的, ...
- poj 3253 Fence Repair(优先队列+huffman树)
一个很长的英文背景,其他不说了,就是告诉你锯一个长度为多少的木板就要花多少的零钱,把一块足够长(不是无限长)的木板锯成n段,每段长度都告诉你了,让你求最小花费. 明显的huffman树,优先队列是个很 ...
- ES 24 - 如何通过Elasticsearch进行聚合检索 (分组统计)
目录 1 普通聚合分析 1.1 直接聚合统计 1.2 先检索, 再聚合 1.3 扩展: fielddata和keyword的聚合比较 2 嵌套聚合 2.1 先分组, 再聚合统计 2.2 先分组, 再统 ...
- javascript基础入门知识点整理
学习目标: - 掌握编程的基本思维 - 掌握编程的基本语法 typora-copy-images-to: media JavaScript基础 HTML和CSS 京东 课前娱乐 众人皆笑我疯癫,我笑尔 ...
- Java虚拟机学习笔记(一)之初识
一:特定 跨平台性.安全性.可移植性. 二:体系机构 Java 体系结构包括四个独立但相关的技术: Java程序设计语言 Java Class文件格式 Java 应用编程接口(API) Java 虚拟 ...
- setInterval循环设置并传入不同的参数
var taskId; var __sto = setInterval; window.setInterval = function(callback,timeout,param){ var args ...
- Wtm携手LayUI -- .netcore 开源生态我们是认真的!
经过WTM团队和LayUI团队多次深入协商,双方于2019年7月29日在北京中国国际展览中心正式达成战略合作意向, 双方签署了战略合作框架协议,LayUI团队承诺使用WTM框架的任何项目都可以免费使用 ...
- 使用 PowerShell 远程管理
要求 PowerShell 版本要求至少是2.0版本以上,目前PowerShell 2.0 支持最低的操作系统版本为Windows XP.本次操作使用的是 PowerShell 5.1 请使用管理员身 ...
- 【Kubernetes 系列五】在 AWS 中使用 Kubernetes:EKS
目录 1. 概述 2. 版本 3. 预备 3.1. 操作环境 3.2. 角色权限 3.2.1. CloudFormation 完全权限 3.2.2. EKS 读写权限 3.2.3. EC2 相关权限 ...