洛谷3958 noip2017 奶酪
2018-03-26 17:57
459 查看
题目:奶酪
思路:并查集。
注意:一定要开long long,考场上就是这里挂了两个点。
代码:#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct Hole{
ll x,y,z;
Hole(){}
Hole(ll xx,ll yy,ll zz){
x=xx,y=yy,z=zz;
}
};
ll n,h,r;
Hole a[1005];
ll fa[1005]={0};
void init(){
for(ll i=1;i<=n;i++) fa[i]=i;
}
ll find(ll x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
void Make(ll m,Hole s){
for(ll i=1;i<m;i++){
Hole t=a[i];
if(((double)t.x-s.x)*(t.x-s.x)+(t.y-s.y)*(t.y-s.y)+(t.z-s.z)*(t.z-s.z)<=4*(double)r*r){
ll f1=find(m),f2=find(i);
if(f1!=f2){
fa[f1]=f2;
}
}
}
}
bool checkUp(ll x){
if(a[x].z+r>=h&&a[x].z-r<=h) return true;
return false;
}
bool checkDown(ll x){
if(a[x].z+r>=0&&a[x].z-r<=0) return true;
return false;
}
bool Check(){
vector<ll> vec1,vec2;
for(ll i=1;i<=n;i++){
find(i);
if(checkUp(i)) vec1.push_back(i);
if(checkDown(i)) vec2.push_back(i);
}
for(ll i=0;i<vec1.size();i++){
for(ll j=0;j<vec2.size();j++){
ll x=vec1[i],y=vec2[j];
if(fa[x]==fa[y]) return true;
}
}
return false;
}
int main(){
ll T;
scanf("%lld",&T);
while(T--){
scanf("%lld%lld%lld",&n,&h,&r);
init();
for(ll i=1;i<=n;i++){
ll x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
a[i]=Hole(x,y,z);
Make(i,a[i]);
}
if(Check()) printf("Yes\n");
else printf("No\n");
}
return 0;
}
思路:并查集。
注意:一定要开long long,考场上就是这里挂了两个点。
代码:#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct Hole{
ll x,y,z;
Hole(){}
Hole(ll xx,ll yy,ll zz){
x=xx,y=yy,z=zz;
}
};
ll n,h,r;
Hole a[1005];
ll fa[1005]={0};
void init(){
for(ll i=1;i<=n;i++) fa[i]=i;
}
ll find(ll x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
void Make(ll m,Hole s){
for(ll i=1;i<m;i++){
Hole t=a[i];
if(((double)t.x-s.x)*(t.x-s.x)+(t.y-s.y)*(t.y-s.y)+(t.z-s.z)*(t.z-s.z)<=4*(double)r*r){
ll f1=find(m),f2=find(i);
if(f1!=f2){
fa[f1]=f2;
}
}
}
}
bool checkUp(ll x){
if(a[x].z+r>=h&&a[x].z-r<=h) return true;
return false;
}
bool checkDown(ll x){
if(a[x].z+r>=0&&a[x].z-r<=0) return true;
return false;
}
bool Check(){
vector<ll> vec1,vec2;
for(ll i=1;i<=n;i++){
find(i);
if(checkUp(i)) vec1.push_back(i);
if(checkDown(i)) vec2.push_back(i);
}
for(ll i=0;i<vec1.size();i++){
for(ll j=0;j<vec2.size();j++){
ll x=vec1[i],y=vec2[j];
if(fa[x]==fa[y]) return true;
}
}
return false;
}
int main(){
ll T;
scanf("%lld",&T);
while(T--){
scanf("%lld%lld%lld",&n,&h,&r);
init();
for(ll i=1;i<=n;i++){
ll x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
a[i]=Hole(x,y,z);
Make(i,a[i]);
}
if(Check()) printf("Yes\n");
else printf("No\n");
}
return 0;
}
相关文章推荐
- NOIP 2017 提高组 Day2 T1 奶酪 cheese.cpp
- 洛谷P3960 [NOIp2017]列队
- NOIp 2017 奶酪 【并查集】 By cellur925
- JZOJ 5476. 【NOIP2017提高组正式赛】奶酪
- NOIP 2017 提高组 Day2 T1 奶酪【并查集】
- 5476. 【NOIP2017提高组正式赛】奶酪
- 洛谷P3953 逛公园_NOIP2017_DAY1_T3
- NOIP 2017 提高组 奶酪___dfs
- NOIP 2017 D2T1 奶酪
- 【Noip2017】D2T1奶酪(cheese)
- 洛谷P3956 [NOIp2017]棋盘
- 洛谷P3959 [NOIP2017]宝藏
- 洛谷P3960 [NOIP2017] 列队
- [NOIp2017 Day2 T1] 奶酪cheese(并查集)
- 洛谷P3953 [NOIP2017] 逛公园(最短路+拓扑序+DP)
- NOIP 2017 奶酪 (BFS)
- [NOIP2017模拟][洛谷3938]斐波那契
- NOIP2017 D2T1 奶酪
- NOIP 2017 Day2 题1:奶酪 并查集
- [NOIP2017模拟][洛谷3939]数颜色