题目链接:【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. CSS3之伪元素选择器和伪类选择器

    伪类选择器,和一般的DOM中的元素样式不一样,它并不改变任何DOM内容.只是插入了一些修饰类的元素,这些元素对于用户来说是可见的,但是对于DOM来说不可见.伪类的效果可以通过添加一个实际的类来达到. ...

  2. java学习——equals()和==的比较

    equals 方法是 java.lang.Object 类的方法. 下面从两个方面来说明equals()和==的差别:(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比 ...

  3. MongoDB-3.4集群搭建:分片

    概念 集群拥有三个节点: 分片(sharding),分发路由(query routers)和配置服务器 (config server) Shard 分片是存储了一个集合部分数据的MongoDB实例,每 ...

  4. 从零搭建SSM框架(二)运行工程

    启动cnki-manager工程 1.需要在cnki-manager 的pom工程中,配置tomcat插件.启动的端口号,和工程名称. 在cnki-manager的pom文件中添加如下配置: < ...

  5. Isomorphic JavaScript: The Future of Web Apps(译)

                                                                                                 Isomorp ...

  6. [php]referer应用--http防盗链技术

    1.防盗链的理解 所谓防盗链是防止其他的网站引用自己网站的资源连接,比如图片.视频等等,但是并不会阻碍从自己网站上享受资源的用户,这就要求能够将其他网站的连接请求阻止 2.防盗链的原理 其实从自己网站 ...

  7. 20155335俞昆《Java程序设计》第五周总结

    #  20155335    <Java程序设计>第五周学习总结 ##  教材学习内容总结 ##  教材学习中的问题和解决过程 对于异常处理,程序中总有意想不到的状况所引发的的错误,Jav ...

  8. 关于HttpWebRequest发生服务器协议冲突的解决办法

    WinForm下的app.config文件中添加: <system.net>    <settings>      <httpWebRequest useUnsafeHe ...

  9. HDU 2593 Pirates’ Code (STL容器)

    题目链接 Problem Description Davy Jones has captured another ship and is smiling contently under the sun ...

  10. 爬虫--Scrapy框架的基本使用

    流程框架 安装Scrapy: (1)在pycharm里直接就可以进行安装Scrapy      (2)若在conda里安装scrapy,需要进入cmd里输入指令conda install scrapy ...