1 条题解
-
0
C :
#include<stdio.h> int p[100005]; int find(int i) { if(p[i]!=i) p[i]=find(p[i]); return p[i]; } int main(void) { int n,d; while(scanf("%d%d",&n,&d)!=EOF) { int i,a[10005],b[10005],c,e,j,x1,x2; for(i=1;i<=n;i++) p[i]=i; for(i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); for(i=1;i<=n;i++) for(j=1;j<i;j++) if((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j])<=d*d) { x1=find(i);x2=find(j); if(x1!=x2) p[x1]=x2; } scanf("%d%d",&c,&e); if(find(c)==find(e)) printf("SUCCESS\n"); else printf("FAIL\n"); } return 0; }C++ :
//4340K 3079MS #include<stdio.h> #include<string.h> #include<math.h> #define M 1007 char s[5]; int x[M],y[M],pre[M],vis[M],g[M][M]; int n,d; void init() { memset(g,0,sizeof(g)); for(int i=1; i<=n; i++) { pre[i]=i; vis[i]=0; } } int find(int x) { while(x!=pre[x]) x=pre[x]; return x; } void unio(int a,int b) { int c=find(a); int d=find(b); pre[c]=d; } bool judge(int i,int j) { return ((y[j]-y[i])*(y[j]-y[i])+(x[j]-x[i])*(x[j]-x[i]))<=d*d; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(scanf("%d%d",&n,&d)!=EOF) { init(); int a,b,c; for(int i=1; i<=n; i++) scanf("%d%d",&x[i],&y[i]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j&&judge(i,j)) unio(i,j); scanf("%d%d",&a,&b); if(find(a)==find(b))printf("SUCCESS\n"); else printf("FAIL\n"); } return 0; }
- 1
信息
- ID
- 927
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者