首页 > 其他分享 >洛谷P2504聪明的猴子

洛谷P2504聪明的猴子

时间:2022-12-04 22:36:38浏览次数:43  
标签:洛谷 monkey int ress P2504 猴子 countx include find

思路:最小生成树

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<vector>
 8 using namespace std;
 9 int n, m;
10 int countx = 0, res[1005];//记录加入的边数,边
11 int nodex[1005][2];
12 //并查集
13 int f[500505] = { 0 };
14 int find(int x) { return f[x] == x ? x : f[x] = find(f[x]); }
15 void merge(int x, int y) { f[find(x)] = find(y); }//x根连在y的根上
16 void kruskal(vector<vector< int>> x) {
17     for (int i = 1; i < m + 1; i++) {
18         if (find(x[i][1]) != find(x[i][2])) {//判断是否该边两节点已连通
19             merge(x[i][1], x[i][2]);//连通
20             countx++;
21             res[countx] = x[i][0];
22         }
23         if (countx == n - 1) break;//全部连通
24     }
25 }
26 int lengthx(int x1, int y1, int x2, int y2) {
27     return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
28 }
29 int main()
30 {
31     int monkey_num = 0, monkey[505];
32     scanf("%d", &monkey_num);
33     for (int i = 1; i <= monkey_num; i++) scanf("%d", &monkey[i]);
34     sort(monkey + 1, monkey + monkey_num + 1);
35     scanf("%d", &n);
36     for (int i = 1; i <= n; i++) scanf("%d %d", &nodex[i][0],&nodex[i][1]);
37     m = 0;
38     for (int i = 1; i < n; i++) m += i;
39     for (int i = 1; i < m + 1; i++) f[i] = i;   //初始化并查集
40     vector<vector< int>> edge(m + 1, vector<int>(3, 0));
41     int c = 0;
42     for (int i = 1; i < n; i++) {
43         for (int j = i + 1; j <= n; j++) {
44             edge[++c][1] = i;
45             edge[c][2] = j;
46             edge[c][0] = lengthx(nodex[i][0], nodex[i][1], nodex[j][0], nodex[j][1]);
47         }
48     }
49     sort(edge.begin(), edge.end());//按边权值升序排列
50     kruskal(edge);
51     int maxres = 0;
52     for (int i = 1; i < n; i++) maxres = max(res[i], maxres);
53     int ress = 1;
54     while (maxres > monkey[ress] * monkey[ress] && ress <= monkey_num) ress++;
55     printf("%d", monkey_num - ress + 1);
56     return 0;
57 }

 

标签:洛谷,monkey,int,ress,P2504,猴子,countx,include,find
From: https://www.cnblogs.com/Explosion556/p/16951005.html

相关文章

  • 洛谷P1111修复公路
    思路:并查集1#include<cstdio>2#include<iostream>3#include<algorithm>4#include<math.h>5#include<vector>6#include<set>7usingnamespacestd;......
  • 【洛谷P8866】喵了个喵
    题目题目链接:https://www.luogu.com.cn/problem/P8866小E喜欢上了一款叫做《喵了个喵》的游戏。这个游戏有一个牌堆和\(n\)个可以从栈底删除元素的栈,任务是要通过游......
  • 洛谷 P1891 疯狂 LCM
    \(\text{lcm}\)不好处理,转化为\(\gcd\):\[n\sum_{i=1}^n\frac{i}{\gcd(i,n)}\]\(\gcd\)相关题目的套路——枚举因数:\[n\sum_{d|n}\sum_{i=1}^n\fracid[......
  • 洛谷 P4552 [Poetize6] IncDec Sequence(差分)
    题目分析直接贴一个洛谷上的题解,真的秀,讲的又清楚又好要使得序列的数全部相等,其实就是让他们之间的差全为0,也就是差分序列的除了第一项每一项都是0,为什么除了第一项呢,因......
  • 洛谷 P1387 最大正方形(前缀和,二分)
    题目分析当一个边长为x的正方形不包含0时,这个正方形内的二维前缀和为x*x,题目想求满足条件的最大的正方形的边长假如最大的正方形的边长为ans,那么凡是边长大于ans的正方形......
  • 洛谷 P1205 [USACO1.2] 方块转换 Transformations
    [USACO1.2]方块转换Transformations题目描述一块\(n\timesn\)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转......
  • 洛谷-P5541 Sleepy Cow Herding S
    SleepyCowHerdingSSleepyCowSorting的升级版,从\(3\)头牛变成\(n\)的情况分类讨论+双指针先把答案本就连续的特判丢掉最大值最大值就尽量把每个空位......
  • 洛谷P2014 [CTSC1997] 选课
    sloj P2006.「树上背包」选课题目描述在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总......
  • 洛谷P2015 二叉苹果树
    slojP10153.「一本通5.2例1」二叉苹果树P2015二叉苹果树题目描述有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)这棵树共有N个结点(叶子......
  • 油猴子常用脚本
    m3u8视频侦测下载器【自动嗅探】AC-baidu-重定向优化百度搜狗谷歌必应搜索Github增强CSDN去除登录复制限制+去除复制携带版权文字+去除关注才能显示内容HTML5视频播放......