题目链接:【http://poj.org/problem?id=3228】

题意:给出n个村庄,每个村庄有金矿和仓库,然后给出m条边连接着这个村子。问题是把所有的金矿都移动到仓库里所要经过的路径的最大值的最小值。

题解:贪心,把边排序,然后从小到大加边,如果加到某一条边之后,金矿都可以移动到仓库了,那么这条边就是结果。首先明白,如果一些边连接的一些村庄的仓库的总容量大于总金矿数,那么这些村庄的金矿就可以全部移动到仓库里了。如果在从小到大加边的时候形成了环,那么这条边可以不要(加进去也不会影响结果),然后用并查集维护就可以了,注意:在用并查集维护的时候,记得把仓库和金矿都移动到根节点,这样便于判断是否已经满足了情况了。

//#include<bits/stdc++.h>
#include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long LL;
using namespace std;
const int maxn = ;
struct node
{
int st, ed, dis;
bool operator < (const node T) const
{
return dis < T.dis;
}
} E[maxn * maxn];
int g[maxn], h[maxn], N, M;
int f[maxn];
int Find(int u)
{
if(u == f[u]) return f[u];
else return f[u] = Find(f[u]);
}
void adde(int u, int v)
{
f[u] = v;
h[v] += h[u];
h[u] = ;
g[v] += g[u];
g[u] = ;
}
bool check()
{
for(int i = ; i <= N; i++)
{
int u = Find(i);
if(h[u] < g[u]) return false;
}
return true;
}
int main ()
{
while(~scanf("%d", &N), N)
{
for(int i = ; i <= N; i++)
f[i] = i;
int sumg = , sumh = ;
for(int i = ; i <= N; i++)
{
scanf("%d", &g[i]);
sumg += g[i];
}
for(int i = ; i <= N; i++)
{
scanf("%d", &h[i]);
sumh += h[i];
}
if(sumh < sumg)
{
printf("No Solution\n");
continue;
}
scanf("%d", &M);
for(int i = ; i <= M; i++)
scanf("%d%d%d", &E[i].st, &E[i].ed, &E[i].dis);
sort(E + , E + + M);
int ans = ;
if(check())
{
printf("%d\n", ans);
continue;
}
for(int i = ; i <= M; i++)
{
int u = Find(E[i].st);
int v = Find(E[i].ed);
if(u == v) continue;
adde(u, v);
ans = E[i].dis;
if(check()) break;
}
if(check()) printf("%d\n", ans);
else printf("No Solution\n");
}
return ;
}

POJ 3228 [并查集]的更多相关文章

  1. poj 1984 并查集

    题目意思是一个图中,只有上下左右四个方向的边.给出这样的一些边, 求任意指定的2个节点之间的距离. 就是看不懂,怎么破 /* POJ 1984 并查集 */ #include <stdio.h& ...

  2. poj 1797(并查集)

    http://poj.org/problem?id=1797 题意:就是从第一个城市运货到第n个城市,最多可以一次运多少货. 输入的意思分别为从哪个城市到哪个城市,以及这条路最多可以运多少货物. 思路 ...

  3. POJ 2492 并查集扩展(判断同性恋问题)

    G - A Bug's Life Time Limit:10000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  4. POJ 2492 并查集应用的扩展

    A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28651 Accepted: 9331 Descri ...

  5. poj 1733 并查集+hashmap

    题意:题目:有一个长度 已知的01串,给出多个条件,[l,r]这个区间中1的个数是奇数还是偶数,问前几个是正确的,没有矛盾 链接:点我 解题思路:hash离散化+并查集 首先我们不考虑离散化:s[x] ...

  6. poj 3310(并查集判环,图的连通性,树上最长直径路径标记)

    题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...

  7. POJ 3657 并查集

    题意: 思路: 1.二分+线段树(但是会TLE 本地测没有任何问题,但是POJ上就是会挂--) 2.二分+并查集 我搞了一下午+一晚上才搞出来----..(多半时间是在查错) 首先 如果我们想知道这头 ...

  8. poj 2236 并查集

    并查集水题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...

  9. poj 1417(并查集+简单dp)

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2087   Accepted: 640 Descrip ...

随机推荐

  1. 关于Java泛型深入理解小总结

    1.何为泛型 首先泛型的本质便是类型参数化,通俗的说就是用一个变量来表示类型,这个类型可以是String,Integer等等不确定,表明可接受的类型,原理类似如下代码 int pattern; //声 ...

  2. 引用类型 ( 对象定义 )——RegExp 类型

    var expression = /pattern/flags; 以上为创建正则表达式格式,斜线包围的为正则表达式,flags 有三个值可以选择 本文地址:http://www.cnblogs.com ...

  3. windows下启动mysql服务的命令行启动和手动启动方法

    1.图形界面下启动mysql服务. 在图形界面下启动mysql服务的步骤如下: (1)打开控制面板->管理工具->服务,如下图所示: 可以看到Mysql服务目前的状态是未启动(未写已启动的 ...

  4. oracle查看表中数据的大小

    通过从视图 user_segments的字段 bytes中找到 select SUM(bytes)/1024/1024 from user_segments where segment_name='E ...

  5. rabbitmq和kafka怎么选?【转】

    MQ框架非常之多,今天简单说一下有代表性的两个MQ(rabbitmq和kafka).经常会有人问rabbitmq和kafka到底哪个好呢?其实没有好与不好之分,只有哪个更合适,首先要根据自己项目的业务 ...

  6. 11.Container With Most Water---两指针

    题目链接:https://leetcode.com/problems/container-with-most-water/description/ 题目大意:给出一串数组(a1, a2, a3, .. ...

  7. ThoughtWorks代码挑战——FizzBuzzWhizz游戏 通用高速版(C/C++ & C#)

    最早看到这个题目是从@ 程序媛想事儿(Alexia) 的 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏 开始的,然后这几天陆陆续续有N个小伙伴发表了自己的文章 ...

  8. 在flask中返回requests响应

    在flask服务端,有时候需要使用requests请求其他url,并将响应返回回去.查阅了flask文档,About Responses,可以直接构造响应结果进行返回. If a tuple is r ...

  9. 20180615 wdcp 域名解析问题

    /usr/local/nginx_bak/conf/nginx.conf  这里有个nginx的配置,修改为nginx_bak

  10. entos 7 mailx配置163邮箱发送邮件

    配置: .com .com set smtp-auth-user=wcczcl set smtp-auth=login set smtp-use-starttls set ssl-verify=ign ...