From 3fb5c48ee5ede80b26b6c42c59303f3c78f1b835 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Tue, 17 Sep 2024 20:04:21 +0800 Subject: [PATCH] update --- 20240823/十四届蓝桥比赛/简单算术题.cpp | 1 + 20240917/P1991/P1991.cpp | 93 ++++++++++++++++++++++++++ xmake.lua | 7 +- 3 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 20240917/P1991/P1991.cpp diff --git a/20240823/十四届蓝桥比赛/简单算术题.cpp b/20240823/十四届蓝桥比赛/简单算术题.cpp index c223807..58b773c 100644 --- a/20240823/十四届蓝桥比赛/简单算术题.cpp +++ b/20240823/十四届蓝桥比赛/简单算术题.cpp @@ -1,4 +1,5 @@ #include +#include using namespace std; typedef long long ll; diff --git a/20240917/P1991/P1991.cpp b/20240917/P1991/P1991.cpp new file mode 100644 index 0000000..69757cc --- /dev/null +++ b/20240917/P1991/P1991.cpp @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include +#include + +const int MAX_P = 500+5; + +struct Dir{ + int x,y; +}; + +struct Edge{ + int s,e; + double dis; + bool operator<(const Edge that)const { + return this->dis < that.dis; + } +}edges[MAX_P*MAX_P]; + + +int s,p; +Dir dirs[MAX_P]; + +decltype(Edge::dis) square(const decltype(Edge::dis) &n){ + return n*n; +} + +int check_sets[MAX_P]; + +int find_set(const int n){ + if(check_sets[n]==n){ + return n; + }else{ + check_sets[n] = find_set(check_sets[n]); + } + return check_sets[n]; +} + +void merge_set(const int a,const int b){ + check_sets[find_set(a)] = check_sets[find_set(b)]; +} + +int main(){ + std::cin.sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0); + + std::cin>>s>>p; + + for(int i=1;i<=p;i++){ + check_sets[i]=i; + } + + for(int i=1;i<=p;i++){ + std::cin>>dirs[i].x>>dirs[i].y; + } + + int flag = -1; + for(int i=1;i<=p;i++){ + for(int j=i+1;j<=p;j++){ + flag++; + edges[flag].e=i,edges[flag].s=j,edges[flag].dis=std::sqrt(square(dirs[i].x-dirs[j].x)+square(dirs[i].y-dirs[j].y)); + } + } + + std::sort(edges,edges+flag+1); + + decltype(Edge::dis) ans{0}; + + // #define NV(v)std::cout<<#v<<" : "<<(v)<<"\n"; + #define NV(v) + + int cnt{0}; + + for(int i=0;i=p-s){ + std::cout<