poj2236 Wireless Network 並查集

來源:互聯網
上載者:User

題目連結:here

PS:第一次自己看英文!!第一次不是百度的題意!!!!

題意:東南亞大地震。。他們電腦全壞了。(我去品質真差,神舟的麼)。然後人要過去修。。需要把電腦都連網,但是硬體限制,所以電腦只能在 d 距離內成功連網。。。第一行輸入電腦個數n和d的值,接著n行,是n個電腦的座標。。然後接下來有操作。。。O代表修第幾台電腦,S代表檢測 兩台電腦是否已經連網。。。注意這裡要用EOF來結束輸出。。。(我在這就卡住了半天。。。)

代碼:

#include <iostream>#include <vector>#include <cstdio>#include <cmath>using namespace std;const int maxn = 1005;struct Node{int x, y;}node[maxn];int fa[maxn];int n, d;vector<int> v;int num;int find(int x){while (x != fa[x]) x = fa[x];return x;}bool judge(int x, int y){int xx = abs(node[x].x-node[y].x), yy = abs(node[x].y-node[y].y);if (xx*xx + yy*yy <= d*d)return true;return false;}void union_set(int x){int fax = find(x);for (int i=0; i<num; i++){int fai = find(v[i]);if (fai != fax && judge(x, v[i]))fa[fai] = fax;}}int main(){while (scanf("%d %d", &n, &d) != EOF){int i;num = 0;v.clear();for (i=1; i<=n; i++){fa[i] = i;scanf("%d %d", &node[i].x, &node[i].y);}getchar();char c;while (scanf("%c", &c) != EOF){if (c == 'O'){int j;scanf("%d", &j);union_set(j);num ++;v.push_back(j);}else if (c == 'S'){int a, b;scanf("%d %d", &a, &b);if (find(a) == find(b)) puts("SUCCESS");else puts("FAIL");}getchar();}}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.