poj2236 并查集

    技术2022-05-20  28

    一张图上分布着n台坏了的电脑,并知道它们的坐标。两台修好的电脑如果距离<=d就可以联网,也可以通过其他修好的电脑间接相连。给出操作“O x”表示修好x,给出操作“S x y”,请你判断x和y在此时有没有连接上。

    由于没有去掉调试时中间显示的结果,导致1WA,真悲催。

    #include <iostream> #include <cmath> using namespace std; int f[1010],x[1010],y[1010]; int d,n,i,r,r1,k1,k2; bool v[1010]; char ch; int find(int i) { if (i!=f[i]) f[i]=find(f[i]); return f[i]; } bool dis(int a, int b) { int q=x[a]-x[b]; int w=y[a]-y[b]; if (q*q+w*w<=d*d) return true; else return false; } int main() { cin >> n >> d; for (i=1;i<=n;i++) { f[i]=i; v[i]=false; } for (i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); while (cin >> ch) { if (ch=='O') { scanf("%d",&r); v[r]=true; for (i=1;i<=n;i++) if (i!=r && v[i] && dis(i,r)) { k1=find(r); k2=find(i); f[k1]=k2; } } if (ch=='S') { scanf("%d%d",&r,&r1); k1=find(r); k2=find(r1); if (k1==k2) cout << "SUCCESS" << endl; else cout << "FAIL" << endl; } } //system("pause"); return 0; }


    最新回复(0)