在新冠疫情期间保持社交距离非常有必要,疾控专家普遍认为保持1米以上的距离可以有效减缓疫情传播。现在给定一些人的坐标,请你计算一下他们是否都安全,如果不安全,那么新冠病毒最快多久能感染所有人。为了方便计算,我们使用厘米作为距离单位,达到或者超过100厘米,我们就认为两个人之间是安全的,如果距离D小于100厘米,那么我们设定病毒会花D秒从一个人传到另一个人。
输入格式:

首先输入人的个数N,随后N行,依次输入N个人的坐标。
输出格式:

对每一组输入,如果所有人之间都能保持安全距离,输出“Good! All are safe!”,如果只有1个人能保持安全距离,输出“Only 1 person is safe!”,如果有2个或者2个以上的人能保持安全距离,但是并不是所有人都保持安全距离,输出“K persons are safe!”,K是人数,如果所有人都不能保持安全距离,那么输出“Warning! All persons are in Danger! Virus will infect everyone in X seconds!”,X是病毒感染所有人所花的最短时间,精确到小数点后2位。
输入样例:

在这里给出一组输入。例如:

2
0 0
1 1

输出样例:

在这里给出相应的输出。例如:

Warning! All persons are in Danger! Virus will infect everyone in 1.41 seconds!

作者
胡伟平
单位
广西科技大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

作者
胡伟平
单位
广西科技大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB


预习考试大半个月终于解放回来写题了,
这是我们校赛的一道题,当时比赛的时候瞄了一眼觉得是简单的板子题就没做,


思路:

  • 二维平面有一堆散点,要求出最小生成树后,断开所有边权大于等于100的边,于是树可能变成多个不连通的图,然后照着题目意思打印就行了.
  • 实际上,我们不需要实现断边操作,因为如果图不连通kruscal算法可以直接生成多个不连通的最小生成树,
  • 但是二维平面点的最小生成树如果要使用kruscal必须加三角剖分(我不会)才能得到比较优秀的复杂度,
    由于老师不想卡我们,所以本题直接瞎搞就行了
#define debug
#ifdef debug
#include <time.h>
#include "/home/majiao/mb.h"
#endif#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <math.h>#define MAXN ((int)3e6+7)
#define ll long long
#define INF (0x7f7f7f7f)
#define fori(lef, rig) for(int i=lef; i<=rig; i++)
#define forj(lef, rig) for(int j=lef; j<=rig; j++)
#define fork(lef, rig) for(int k=lef; k<=rig; k++)
#define QAQ (0)using namespace std;#define show(x...)                             \do {                                       \cout << "\033[31;1m " << #x << " -> "; \err(x);                                \} while (0)void err() { cout << "\033[39;0m" << endl; }
template<typename T, typename... A>
void err(T a, A... x) { cout << a << ' '; err(x...); }namespace FastIO {char print_f[105];void read() { }void print() { putchar('\n'); }template <typename T, typename... T2>inline void read(T &x, T2 &... oth) {x = 0;char ch = getchar();ll f = 1;while (!isdigit(ch)) {if (ch == '-') f *= -1; ch = getchar();}while (isdigit(ch)) {x = x * 10 + ch - 48;ch = getchar();}x *= f;read(oth...);}template <typename T, typename... T2>inline void print(T x, T2... oth) {ll p3=-1;if(x<0) putchar('-'), x=-x;do{print_f[++p3] = x%10 + 48;} while(x/=10);while(p3>=0) putchar(print_f[p3--]);putchar(' ');print(oth...);}
} // namespace FastIO
using FastIO::print;
using FastIO::read;int n, m, Q, K;#define fst first
#define sec secondvector<pair<int,int> > vec;struct Edge {int u, v;double dst;bool operator < (const Edge& ed) const {return dst< ed.dst;}
} edge[MAXN];inline double getdist(double x1, double y1, double x2, double y2) {double X = x1 - x2, Y = y1 - y2;return sqrt(X*X + Y*Y);
}int pre[MAXN], pre2[MAXN], cnt[MAXN];
double ptime[MAXN];void init() {for(int i=0; i<=n; i++) pre[i] = pre2[i] = i, cnt[i] = 1;
}int fa(int* ptr, int x) {return x==ptr[x] ? x : (ptr[x]=fa(ptr, ptr[x]));
}void union_xy(int* ptr, int x, int y) {x = fa(ptr, x), y = fa(ptr, y);if(x != y) cnt[x] += cnt[y], ptr[y] = ptr[x];
}#define double_inf (1e18)
void krs() {init();sort(edge+1, edge+1+m);int k = int(vec.size()) - 1;double tmin = double_inf, sum = 0;for(int i=1; i<=m && k; i++) {int u = edge[i].u, v = edge[i].v;double w = edge[i].dst;//这里加入判断边权长度即可跳过不符合的边if(fa(pre, u) == fa(pre, v) || w >= 100.) continue ;k --;union_xy(pre, u, v);sum += w;}int root = 0/*根节点个数*/, ans = 0/*落单点个数*/;for(int i=0; i<n; i++) {if(pre[i] == i) {root ++;if(cnt[i] == 1) {ans ++;}}}if(root == 1) { //只有一个根,说明所有点都被联通了printf("Warning! All persons are in Danger! Virus will infect everyone in %.2lf seconds!", sum);} else if(root == 2 && ans == 1) { //只有两个联通块,其中一个是单点printf("Only 1 person is safe!\n");} else if(root == n) { //n个联通块printf("Good! All are safe!\n");} else { //小于n个联通块printf("%d persons are safe!", ans);}
}int main() {#ifdef debugfreopen("test", "r", stdin);// freopen("out_main", "w", stdout);clock_t stime = clock();
#endifread(n);pair<int, int> p;for(int i=0; i<n; i++) {read(p.fst, p.sec);for(int k=0; k<int(vec.size()); k++) {edge[++m].u = i, edge[m].v = k;edge[m].dst = getdist(vec[k].fst, vec[k].sec, p.fst, p.sec);}vec.push_back(p);}krs();#ifdef debugclock_t etime = clock();printf("rum time: %lf 秒\n",(double) (etime-stime)/CLOCKS_PER_SEC);
#endif return 0;
}

7-14保持安全社交距离的重要性 最小生成树板子题相关推荐

  1. 使用Python+OpenCV+detectorn2实现社交距离检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 介绍 美国和欧洲的许多城市现在都在谨慎地重新开放.人们被要求在外出 ...

  2. 吴恩达的公司,发布了一款社交距离警告工具

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 内容概要:提醒大家在公共场所保持距离,可以有效的防止交叉感染.近日吴恩达创立的公司 L ...

  3. 欧几里得距离网络_使用Tensorflow对象检测模型和OpenCV的社交距离和遮罩检测器...

    将深度学习和计算机视觉相结合的隔离项目社会距离化 这个术语已席卷全球,正在改变着我们的生活方式.社交距离也称为"物理距离",是指在您自己与其他并非来自家庭的人之间保持安全的空间.随 ...

  4. tensorflow图形检测_社交距离检测器——Tensorflow检测模型设计

    在隔离期间,我花时间在github上探索Tensorflow的大量预训练模型.这样做时,我偶然发现了一个包含25 个带有性能和速度指标的预训练对象检测模型的存储库.拥有一些计算机视觉知识并给出了实际的 ...

  5. ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo

    摘要:本Demo使用YOLOv3_Resnet18模型来检测的视频流中的行人,获取行人坐标(即图中蓝色方框),然后计算所有检测到的人之间的相互"距离". 作者:华为云EI专家厉天一 ...

  6. 面对疫情防控的多摄像头社交距离检测方案

    一.用例介绍 我们知道,保持必要的社交距离和戴口罩可以有效降低疫情传播的风险.多摄像头社交距离检测用例可以检测人员并根据多个输入源计算人员之间的社交距离,并对违规人员进行标记和计数,且在浏览器中实时可 ...

  7. [智慧防疫]Python基于YOLO的新冠社交距离检测系统[完整源码&部署教程]

    1.图片演示 2.视频演示 3.背景 美国和欧洲的许多城市现在都在谨慎地重新开放.人们被要求在外出时保持安全距离.但是人们照着做吗?城市对人们的安全距离是否符合规则进行评估并采取相应的行动是很重要的. ...

  8. 3M与惠普公司合作开发标识模板,支持大众保持社交距离

    近日,3M与惠普共同宣布了一项全新合作,双方将向社会免费开放大幅面图形资源库,用于商业标识的制作应用.在全球疫情下,这些标识对于提倡公众保持社交距离,为企业复工复产提供健康安全保障而言至关重要. 此次 ...

  9. 亚马逊发布AI跟踪系统,监督员工能否保持社交距离

    据国外媒体报道,当地时间周二亚马逊公司推出了一款基于人工智能的跟踪系统,让办公室和仓库的员工彼此之间保持一定的社交距离,帮助降低员工感染新型冠状病毒的风险. 亚马逊发布这套系统之际,正值美国国会议员和 ...

最新文章

  1. Spring Boot 、Spring Data JPA、Hibernate集成
  2. python机器学习包
  3. POJ1741:Tree——题解+树分治简要讲解
  4. 【Java代码】使用双冒号 :: 简洁代码及方法引用(静态方法+构造方法+实例方法+函数式编程举例)
  5. QT的QCalendarWidget类的使用
  6. [BUUCTF-pwn]——picoctf_2018_can_you_gets_me
  7. Angular jasmine如何从detectChange触发refreshView进而执行到Component的hook实现
  8. 【Leetcode | 9】217. 存在重复元素
  9. Vue的条件渲染和对象渲染
  10. 【医院HIS系统专题】医院HIS系统应用案例及解决方案汇总贴
  11. 给出年、月、日,计算该日是该年的第几天
  12. excel离散度图表怎么算_怎么在excel中计算散点图的公式
  13. 费马大定理与费马小定理
  14. 【破解手记】普利尼,破解手记[1]
  15. 用迅雷打开php文件,迅雷下的php文件怎么打开啊?
  16. 零基础能掌握seo知识吗
  17. 服务器简介(一):服务器定义、服务器特点、服务器分类、服务器软件
  18. I Am Fortunate Indeed
  19. 计算机应用大赛宣传稿,江苏开放大学计算机应用基础中国名城宣传片
  20. 一个完整的项目管理流程!

热门文章

  1. A Contextual-Bandit Approach to Personalized News Article Recommendation-论文学习
  2. 有一种银行叫生命银行
  3. 微信攻城三国怎么找服务器,攻城三国用微信能充值么 | 手游网游页游攻略大全...
  4. stackoverflow那些有趣的badges
  5. 远离“灰色地带”,网络视频变革中
  6. 教育整改进行时,家长有话要说
  7. 微信支付开通H5支付
  8. android studio r文件错误,android studio 出现找不到R文件的错误
  9. 云从科技冲刺IPO:加码人机协同,加速产业落地,预计2025年盈利
  10. Godot引擎 4.0 文档 - 入门介绍 - Godot 关键概念概述¶