Problem 2233 ~APTX4869

Accept: 55    Submit: 176
Time Limit: 1000 mSec    Memory Limit : 32768 KB

Problem Description

为了帮助柯南回到一米七四,阿笠博士夜以继日地研究APTX4869的解药。他得出了如下结果:

1.解药由n种原料构成;

2.对于两种不同的的原料a,b,它们之间有个影响值f(a,b);

3.需要把原料分成两个部分X,Y,每部分中至少有一种原料;

4.解药的效果由分别属于X,Y的原料之间,最小的影响值决定,即

效果=min{f(a,b)|a∈X,b∈Y)}

博士需要你帮忙求出:在所有的方案中,最大的效果值可以是多少?

Input

多组数据(<=10),处理到EOF。

每组数据输入第一行为一个正整数n。

接下去是一个n行n列的整数矩阵,同一行的数以空格隔开。矩阵第i行j列表示第i种和第j种材料的影响值f(i,j)。给出的矩阵是对称的,即f(i,j)=f(j,i)。当i=j时,f(i,i)没有意义,矩阵该处的值为-1。

2<=n<=800。当i!=j时,0<=f(i,j)<=1000000;当i=j时,f(i,j)=-1。

Output

每组数据输出一行,表示最大可能的效果值。

Sample Input

3
-1 100 300
100 -1 200
300 200 -1

Sample Output

200

Source

福州大学第十三届程序设计竞赛

思路:并查集;
按照贪心的思路,我们把小的边先合并,在合并小的边时,我们有两种选择,那么就是把两个点分开或合并,所以每当我们找到俩个当前不在一个集合的点,我们更新最小值。
如果当前两个点以合并,那么continue;
下面反证:如果在后面已经合并的点要更新最小值,那么,这两点必定通过前面的点相连通,那么必定要断开一些点将这些点加入到相反的集合,也就是比如这两点为x,y,那么x,y必定不能在同一集合,而且有一些开始在x中的点要到y中必定造成,最小值减小,而不会取x,y之间的值。
 1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 using namespace std;
7 int bin[1000];
8 int shen[1000];
9 int ju[1000][1000];
10 typedef struct pp
11 {
12 int x;
13 int y;
14 int cost;
15 } ss;
16 ss aa[1000000];
17 bool cmp(pp n,pp m)
18 {
19 return n.cost<m.cost;
20 }
21 int main(void)
22 {
23 int i,j,k;
24 while(scanf("%d",&k)!=EOF)
25 {
26 for(i=0; i<=1000; i++)
27 {
28 shen[i]=1;
29 bin[i]=i;
30 }
31 for(i=1; i<=k; i++)
32 {
33 for(j=1; j<=k; j++)
34 {
35 scanf("%d",&ju[i][j]);
36 }
37 }
38 int cnt=0;
39 for(i=1; i<=k; i++)
40 {
41 for(j=i+1; j<=k; j++)
42 {
43 aa[cnt].cost=ju[i][j];
44 aa[cnt].x=i;
45 aa[cnt].y=j;
46 cnt++;
47 }
48 }
49 sort(aa,aa+cnt,cmp);
50 int coutt=0;
51 for(i=0; i<cnt; i++)
52 {
53 int xx;
54 int yy;
55 for(xx=aa[i].x;xx!=bin[xx];)
56 xx=bin[xx];
57 for(yy=aa[i].y;yy!=bin[yy];)
58 yy=bin[yy];
59 if(xx!=yy)
60 {
61 coutt=aa[i].cost;
62 if(shen[xx]>shen[yy])
63 {
64 shen[xx]+=shen[yy];
65 bin[yy]=xx;
66 }
67 else
68 {
69 shen[yy]+=shen[xx];
70 bin[xx]=yy;
71 }
72 }
73 }printf("%d\n",coutt);
74 }return 0;
75 }

Problem 2233 ~APTX4869的更多相关文章

  1. FZu Problem 2233 ~APTX4869 (并查集 + sort)

    题目链接: FZu Problem 2233 ~APTX4869 题目描述: 给一个n*n的矩阵,(i, j)表示第 i 种材料 和 第 j 种材料的影响值,这个矩阵代表这n个物品之间的影响值.当把这 ...

  2. FZU 2233 ~APTX4869 贪心+并查集

    分析:http://blog.csdn.net/chenzhenyu123456/article/details/51308460 #include <cstdio> #include & ...

  3. (并查集)~APTX4869(fzu 2233)

    http://acm.fzu.edu.cn/problem.php?pid=2233 Problem Description 为了帮助柯南回到一米七四,阿笠博士夜以继日地研究APTX4869的解药.他 ...

  4. 1199 Problem B: 大小关系

    求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...

  5. No-args constructor for class X does not exist. Register an InstanceCreator with Gson for this type to fix this problem.

    Gson解析JSON字符串时出现了下面的错误: No-args constructor for class X does not exist. Register an InstanceCreator ...

  6. C - NP-Hard Problem(二分图判定-染色法)

    C - NP-Hard Problem Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:262144 ...

  7. Time Consume Problem

    I joined the NodeJS online Course three weeks ago, but now I'm late about 2 weeks. I pay the codesch ...

  8. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

  9. hdu1032 Train Problem II (卡特兰数)

    题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能.    (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...

随机推荐

  1. Qt5的安装和编译

    Ubuntu18.04安装Qt5 1.配置unbuntu 和宿主机共享文件夹安装vmware-tools 2.下载 Qt  http://download.qt.io/archive/qt/ 3.修改 ...

  2. SparkStreaming消费Kafka,手动维护Offset到Mysql

    目录 说明 整体逻辑 offset建表语句 代码实现 说明 当前处理只实现手动维护offset到mysql,只能保证数据不丢失,可能会重复 要想实现精准一次性,还需要将数据提交和offset提交维护在 ...

  3. Can we use function on left side of an expression in C and C++?

    In C, it might not be possible to have function names on left side of an expression, but it's possib ...

  4. Shell脚本实现自动修改IP地址

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名 ...

  5. 使用jquery刷新页面以及javascript的一些基本函数

    如何使用jquery刷新当前页面 下面介绍全页面刷新方法:有时候可能会用到 1.window.location.reload()刷新当前页面. 2.parent.location.reload()刷新 ...

  6. java客户端的elasticSearch索引库的相关操作

    package com.hope.es;import org.elasticsearch.client.transport.TransportClient;import org.elasticsear ...

  7. 【Spark】【RDD】从内存(集合)创建RDD

    val list = List(1,2,3) var rdd = sc.parallelize(list) rdd.partitions.size 通过调用SparkContext的paralleli ...

  8. 你的Redis怎么持久化的

    一.持久化套路 OK,一般我们在生产上采用的持久化策略为 (1)master关闭持久化 (2)slave开RDB即可,必要的时候AOF和RDB都开启 该策略能够适应绝大部分场景,绝大部分集群架构. 为 ...

  9. thinkphp or查询

    $map['source'] = array(array('eq',0),array('eq',1), 'or'); $this->model->where($map)

  10. <转>网络爬虫原理

    网络爬虫是捜索引擎抓取系统的重要组成部分.爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份.这篇博客主要对爬虫以及抓取系统进行一个简单的概述. 一.网络爬虫的基本结构及工作流程 ...