POJ:3228-Gold Transportation(要求最小生成树最大边最小)
Gold Transportation
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 3079 Accepted: 1101
Description
Recently, a number of gold mines have been discovered in Zorroming State. To protect this treasure, we must transport this gold to the storehouses as quickly as possible. Suppose that the Zorroming State consists of N towns and there are M bidirectional roads among these towns. The gold mines are only discovered in parts of the towns, while the storehouses are also owned by parts of the towns. The storage of the gold mine and storehouse for each town is finite. The truck drivers in the Zorroming State are famous for their bad temper that they would not like to drive all the time and they need a bar and an inn available in the trip for a good rest. Therefore, your task is to minimize the maximum adjacent distance among all the possible transport routes on the condition that all the gold is safely transported to the storehouses.
Input
The input contains several test cases. For each case, the first line is integer N(1<=N<=200). The second line is N integers associated with the storage of the gold mine in every towns .The third line is also N integers associated with the storage of the storehouses in every towns .Next is integer M(0<=M<=(n-1)*n/2).Then M lines follow. Each line is three integers x y and d(1<=x,y<=N,0
Output
For each case, output the minimum of the maximum adjacent distance on the condition that all the gold has been transported to the storehouses or “No Solution”.
Sample Input
4
3 2 0 0
0 0 3 3
6
1 2 4
1 3 10
1 4 12
2 3 6
2 4 8
3 4 5
0
Sample Output
6
解题心得:
- 题意就是很多个点,每个点有等待放置的金子也有可以储存的金子的量,给你一些边,你选择这些边连接的点的金子可以相互转移,最后需要让所有的金子都能够被储存,并且要求选择出来的边要最大的边最小。
- 这个就是一个最小生成树,记录一个点有的金子为正值,可以储存的值为负值,然后选择边将点连接起来,连接起来的点要将值相加,最后只要所有连接起来的点没有大于0的值就可以停止加边了。
- 关于最大的边最小的问题,可以直接使用Kruskal算法,在Kruskal的算法之中,添加的边都是从小开始添加的,所以使用Kruskal算法,得到的最小生成树最大的边就是最大边中的最小。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1000;
int res[maxn],father[maxn],Sum,n,m;
struct NODE
{
int s,e,len;
} node[maxn*maxn];
bool cmp(NODE a,NODE b)
{
return a.len < b.len;
}
void init()
{
memset(res,0,sizeof(res));
memset(node,0,sizeof(node));
for(int i=0;i<maxn;i++)
father[i] = i;
//有金子的量为正,可以储存的量为负
for(int i=1; i<=n; i++)
scanf("%d",&res[i]);
for(int i=1; i<=n; i++)
{
int x;
scanf("%d",&x);
res[i] -= x;
}
scanf("%d",&m);
for(int i=0; i<m; i++)
scanf("%d%d%d",&node[i].s,&node[i].e,&node[i].len);
sort(node,node+m,cmp);
}
int find(int x)
{
if(x == father[x])
return x;
return father[x] = find(father[x]);
}
bool check()//检查是不是所有的点都是不大于0的
{
for(int i=1;i<=n;i++)
{
int fx = find(i);
if(res[fx] > 0)
return false;
}
return true;
}
void solve()
{
int Max_path = 0;
for(int i=0; i<m; i++)
{
if(check())//如果出现的点全是小于等于0的直接跳出
break;
int s = node[i].s;
int e = node[i].e;
int fx = find(s);
int fy = find(e);
if(fx == fy)
continue;
int len = node[i].len;
if(len > Max_path)
Max_path = len;
int Min = min(res[fx],res[fy]);
int Max = max(res[fx],res[fy]);
father[fx] = fy;
res[fy] = Min+Max;//合并之后将值也合并
}
if(!check())
printf("No Solution\n");
else
printf("%d\n",Max_path);
}
int main()
{
while(cin>>n && n)
{
init();
solve();
}
return 0;
}
POJ:3228-Gold Transportation(要求最小生成树最大边最小)的更多相关文章
- POJ 3228 Gold Transportation
Gold Transportation Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Ori ...
- POJ 3228 Gold Transportation(带权并查集,好题)
参考链接:http://www.cnblogs.com/jiaohuang/archive/2010/11/13/1876418.html 题意:地图上某些点有金子,有些点有房子,还有一些带权路径,问 ...
- poj 3228 Gold Transportation 二分+网络流
题目链接 给出n个城市, 每个城市有一个仓库, 仓库有容量限制, 同时每个城市也有一些货物, 货物必须放到仓库中. 城市之间有路相连, 每条路有长度. 因为有些城市的货物量大于仓库的容量, 所以要运到 ...
- POJ 1797 Heavy Transportation 【最大生成树的最小边/最小瓶颈树】
Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...
- poj 1797 Heavy Transportation(最大生成树)
poj 1797 Heavy Transportation Description Background Hugo Heavy is happy. After the breakdown of the ...
- POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径)
POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径) Description Background Hugo ...
- POJ.1797 Heavy Transportation (Dijkstra变形)
POJ.1797 Heavy Transportation (Dijkstra变形) 题意分析 给出n个点,m条边的城市网络,其中 x y d 代表由x到y(或由y到x)的公路所能承受的最大重量为d, ...
- POJ 3241 Object Clustering 曼哈顿最小生成树
Object Clustering Description We have N (N ≤ 10000) objects, and wish to classify them into severa ...
- 【POJ 2400】 Supervisor, Supervisee(KM求最小权匹配)
[POJ 2400] Supervisor, Supervisee(KM求最小权匹配) Supervisor, Supervisee Time Limit: 1000MS Memory Limit ...
随机推荐
- (转)磁盘阵列RAID原理、种类及性能优缺点对比
磁盘阵列RAID原理.种类及性能优缺点对比 原文:http://www.cnblogs.com/chuncn/p/6008173.html 磁盘阵列(Redundant Arrays of Indep ...
- Centos7.2内网环境安装MySQL5.7.24
1.配置本地yum源 内网环境,首先需要配置本地yum源,以解决MySQL的依赖安装,具体参考该文:点击打开 2.查看服务器环境 uname -a 3.去官网下载MySQL安装包 MySQL官网网址: ...
- JAVA---spring-boot入门(图文教程)
Spring Boot可以轻松创建独立的,生产级的基于Spring的应用程序,他的特征: 1.创建独立的Spring应用程序 2.直接嵌入Tomcat,Jetty或Undertow(无需部 ...
- B/S架构 C/S架构 SOA架构
一.什么是C/S和B/S 第一.什么是C/S结构.C/S (Client/Server)结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配 ...
- Java实现将GBK编码格式的文件夹中所有文件都转化为UTF-8格式的文件,编码格式转化
package CodeConvert; import Java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
- Kendo UI Widgets 概述
UI Widgets 概述 Kendo UI 是基于 jQuery 库开发的,Kendo UI widgets 是以 jQuery 插件形式提供的.这些插件的名称基本上都是以 kendo 作为前缀.比 ...
- 备份和导入Outlook 2016 电子邮件签名
在本文中,我将分享您在Outlook 2013和Outlook 2016中备份或导入签名的过程 在清除Outlook配置文件之前,请确保您通过在文件资源管理器中的配置文件中的APPDATA文件夹中复制 ...
- JavaScript空假值及其判断
一.javaScript五种空值和假值 分别为undefined,null,false,"",0,这五个值的共同点是在执行if语句时都会执行false分支,执行对应的非语句的时候都 ...
- java面试题(杨晓峰)---第八讲谈谈Vector,ArrayList,LinkedList有何区别?
Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别. 1 底层实现方式 ArrayList内部数组来实现,LinkedList内部采用双向链 ...
- java sql database相关收集
1 java prepareStatement http://www.importnew.com/5006.html 2 java ENGINE=InnoDB的使用 http://www.cnblog ...