~APTX4869
来源:互联网 发布:java web面试题 编辑:程序博客网 时间:2024/05/28 09:31
为了帮助柯南回到一米七四,阿笠博士夜以继日地研究APTX4869的解药。他得出了如下结果:
1.解药由n种原料构成;
2.对于两种不同的的原料a,b,它们之间有个影响值f(a,b);
3.需要把原料分成两个部分X,Y,每部分中至少有一种原料;
4.解药的效果由分别属于X,Y的原料之间,最小的影响值决定,即
博士需要你帮忙求出:在所有的方案中,最大的效果值可以是多少?
多组数据(<=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。
每组数据输出一行,表示最大可能的效果值。
3-1 100 300100 -1 200300 200 -1
200
简单的并差集。从小到大排序。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{ int x,y,val;};int f[100000];int Map[810][810];node edge[810*810];bool cmp(node n,node m){ return n.val<m.val;}int find(int n){ if(f[n]==n) return n; else f[n]=find(f[n]); return f[n];}int merge(node n){ int yy=find(n.x); int xx=find(n.y); if(yy!=xx) { f[xx]=yy; return 1; } return 0;}int main(){ int n,m,i,j; while(scanf("%d",&n)!=EOF) { for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { scanf("%d",&Map[i][j]); } } int top = 0; for(int i =1; i <= n; i++) { f[i] = i; for(int j = i+1; j <= n; j++) { edge[top].x = i; edge[top].y = j; edge[top].val = Map[i][j]; top++; } } sort(edge,edge+top,cmp); int ans=0; for(i=0; i<top; i++) { if(merge(edge[i])==1) { ans=edge[i].val; } } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- ~APTX4869
- FZU ~APTX4869
- fzoj Problem 2233 ~APTX4869 【并查集】
- FZU 2233 ~APTX4869 (贪心 并查集)
- FZU 2233 ~APTX4869【贪心+并查集】
- FZU 2233 ~APTX4869(并查集)
- 福州oj--2233--~APTX4869(并查集)
- 【CUGBACM15级BC第25场 A】hdu 5154 Harry and Magical Computer
- 局域网其他电脑不能连接SVN服务器
- 【拜小白opencv】22-自适应阈值化操作:adaptiveThreshold()函数
- Python+正则表达式编写多线程百度贴吧网页爬虫
- Week 9 Lecture Notes
- ~APTX4869
- java 线程池
- Input类
- PostgreSQL 9种索引的原理和应用场景
- mysql--6.多表查询
- Docker的各种概念
- k近邻法
- java 中 equals 与 == 的区别
- Unity脚本生命周期常用方法