问题标题: 洛谷:洛谷P3958 奶酪怎么写

0
0
已解决
陆麟瑞
陆麟瑞
资深天翼
资深天翼

如题

陆麟瑞在2018-03-20 18:53:00追加了内容

@梁彦博 @陶梓锐 @樊澄宇 @葛新

陆麟瑞在2018-03-21 12:45:27追加了内容

@梁锦程 


0
已采纳
梁锦程
梁锦程
高级光能
高级光能

要么是并(shen)查(me)集(gui)要么是最(wo)短(de)路(tian)径(na)
弱弱的我不会写。。抱歉 

0
0
芮奥运
芮奥运
高级光能
高级光能

实在不懂的话就看题解

0
0
黄昊轩
黄昊轩
新手守护
新手守护

int f[1001];

int find(int x){ if (x!=f[x]) f[x]=find(f[x]); return f[x]; } double dis(long long x,long long y,long long z,long long x1,long long y1,long long z1){ return sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1)); } long long x[100001],y[100001],z[100001]; int f1[100001],f2[100001];  int main(){ int t; scanf("%d",&t); int n,h; long long r; for (int i=1;i<=t;i++){ scanf("%d%d%ld",&n,&h,&r);int tot1=0; int tot2=0; for (int j=1;j<=n;j++){ f[j]=j;  } for (int j=1;j<=n;j++){ scanf("%ld%ld%ld",&x[j],&y[j],&z[j]);//long long if (z[j]+r>=h){tot1++; f1[tot1]=j; } if (z[j]-r<=0){ tot2++; f2[tot2]=j; } for (int k=1;k<=j;k++){ if (dis(x[j],y[j],z[j],x[k],y[k],z[k])<=2*r){ int a1=find(j); int a2=find(k); if (a1!=a2) f[a1]=a2; } } } int s=0;  for (int j=1;j<=tot1;j++){ for (int k=1;k<=tot2;k++){ if (find(f1[j])==find(f2[k])){ s=1; break; } } if (s==1) break; } if (s==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0;

0
0
我要回答