忘记写题意了。这题题意:给出每个地点的金矿与金库的数量,再给出边的长度。求取最大可通过边长的最小权值使每个金矿都能运输到金库里。

这题和之前做的两道二分枚举最大流答案的问法很相识,但是这里用最大流速度不够快,所以用了并查集来判断。

方法:边排序后,每次边判断为,将两点合集,若合集中满足金库数量大于金矿数量  则该合集满足条件。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define MAXN 40000
int n,m,ans,in,out;
int fa[500],f[500];
bool flag;
struct Edge{
int a,b,len;
}edge[MAXN];
int find(int x)
{
if(x!=fa[x])
fa[x]=find(fa[x]);
return fa[x];
}
bool cmp(Edge a,Edge b)
{
return a.len<b.len;
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
int num=0; //不满足的集合个数
memset(f,0,sizeof(f));
for(int i=0;i<n;i++)
{
scanf("%d",&in);
f[i+1]-=in;
}
for(int i=0;i<n;i++)
{
scanf("%d",&out);
f[i+1]+=out;
if(f[i+1]<0)num++;
}
scanf("%d",&m);
int a,b,c;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
edge[i].a=a;
edge[i].b=b;
edge[i].len=c;
}
sort(edge,edge+m,cmp);
int f1,f2;
for(int i=0;i<=n;i++)
fa[i]=i;
flag=false;
for(int i=0;i<m;i++) //从小枚举边长 最多40000次
{
f1=find(edge[i].a);
f2=find(edge[i].b);
if(f1!=f2)
{
fa[f1]=f2; //合并时 进行判断 //f2成为父节点
//以f2为父节点的集合 加上以f1为父节点的结合的f 当此集合满足时
f[f2]+=f[f1];//更新集合若满足条件后 进行操作
if(f[f2]>=0)
{
if(f[f2]-f[f1]<0||f[f1]<0) //表示解决一个
num--;
}
else if(f[f2]<0)
{
if(f[f2]-f[f1]<0&&f[f1]<0) //两个问题合并成一个
num--;
}
if(num==0)
{
flag=true;
ans=edge[i].len;
}
}
if(flag)
break;
}
if(flag)
printf("%d\n",ans);
else
printf("No Solution\n");
}
return 0;
}

POJ3228 并查集或二分最大流枚举答案的更多相关文章

  1. HDU-3081-Marriage Match II 二分图匹配+并查集 OR 二分+最大流

    二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示 ...

  2. HDU3081:Marriage Match II (Floyd/并查集+二分图匹配/最大流(+二分))

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...

  4. [agc002D]Stamp Rally-[并查集+整体二分]

    Description 题目大意:给你一个n个点m个条边构成的简单无向连通图,有Q组询问,每次询问从两个点x,y走出两条路径,使这两条路径覆盖z个点,求得一种方案使得路径上经过的边的最大编号最小.n, ...

  5. [AGC002D] Stamp Rally (并查集+整体二分)

    Description 给你一个n个点m个条边构成的简单无向连通图,有Q组询问,每次询问从两个点x,y走出两条路径,使这两条路径覆盖z个点,求得一种方案使得路径上经过的变的最大编号最小. Input ...

  6. 【2018百度之星初赛 B】1001并查集 1004二分 1006不等式

    1001 degree 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6380 并查集向图中加点,分别记录与初始度数最多的点 直接相连的点数.独立的点数 ...

  7. NOIP 2010 关押罪犯 并查集 二分+二分图染色

    题目描述: S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值" ...

  8. BNU 51275 道路修建 Large 并查集

    分析(引入Q神题解  %%%Q) 如果使用可持久化并查集,二分答案判定连通性,复杂度是O(mlog3n),不能在时限内出解.考虑到并查集实际上是一棵树,可以尝试在边上维护一些信息,假设t时刻加了一条边 ...

  9. BZOJ2303: [Apio2011]方格染色 【并查集】

    Description Sam和他的妹妹Sara有一个包含n × m个方格的表格.她们想要将其的每个方格都染成红色或蓝色.出于个人喜好,他们想要表格中每个2 × 2的方形区域都包含奇数个(1 个或 3 ...

随机推荐

  1. spring boot admin

    这里记录一个spring cloud的模板,有的模块spring cloud eureka + spring boot admin + spring cloud zuul + 一个普通spring c ...

  2. com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'goodsName' cannot be null

    com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'goodsName' cannot be n ...

  3. 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 解析(四)之插入SQL

  4. 计蒜客模拟赛D1T2 蒜头君的树:树上节点之间最短距离和

    题目链接:https://nanti.jisuanke.com/t/16446 题意: 给你一棵有n个节点的树以及每条边的长度,输出树上节点之间的最短距离和.然后进行m次操作,每次操作更改一条边的长度 ...

  5. 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署

    概述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共 ...

  6. Linux使用系统光盘作为YUM源

    --Linux使用系统光盘作为YUM源------------------------------2013/11/07 1. 挂载光盘 Linux代码   # mkdir /media/cdrom   ...

  7. Vim命令快捷键(网摘)

    Vim命令快捷键(网摘) 原文出处:[?---->home]

  8. HTML-移动开发技巧 响应式布局 弹性布局

    移动开发常用技巧 [viewport基本知识] 设置布局viewpoint的各种信息 1.width=device-width;设置viewport视口宽度等于设备宽度 2.initial-scale ...

  9. # Consumed parameters

    consumed这个单词我并不能给出很准确的翻译,在这篇文章中,我把Consumed parameters称为耗用参数,它在OC中有着独特的应用场景. 在https://clang.llvm.org/ ...

  10. js For循环练习。

    一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 var i = 1; var height = 0.0001; while(true){ height *= 2; if( ...