POJ 2236 Wireless Network

來源:互聯網
上載者:User

標籤:vector   tor   tin   clu   art   鄰接表   pow   並查集   math   

算起來是個並查集問題。


題意是說 有N台電腦。每台電腦能以自身為中心串連D米範圍的電腦。

給出N台電腦座標,針對詢問操作。輸出是否連通。


我用鄰接表格儲存體的,假設兩電腦座標 距離小於他們半徑和,存起來。表明這兩個點能夠連通。

用 online[] 表明是否被修複。 修複之後才幹夠用並查集合并。

修複操作就啟用 online,然後遍曆這個點的鄰接邊,假設也有online 的,就合并。

之後就是針對詢問 輸出。

在一個集合就SUCCESS


#include<cstdio>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<queue>#include<map>#include<stack>#include<iostream>#include<list>#include<set>#include<cmath>#define INF 0x7fffffff#define eps 1e-6using namespace std;int n;double r;vector<int>g[1001];int fa[1001];bool online[1001];struct node{    double x,y;} point[1001];int father(int x){    if(x!=fa[x])        return fa[x]=father(fa[x]);}double getlen(node a,node b){    double len=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));    return len-r;}int main(){    scanf("%d%lf",&n,&r);    for(int i=1; i<=n; i++)        scanf("%lf%lf",&point[i].x,&point[i].y);    for(int i=1; i<=n; i++)        fa[i]=i,g[i].clear();    int cot=0;    for(int i=1; i<=n; i++)        for(int j=i+1; j<=n; j++)        {            double len=getlen(point[i],point[j]);            if(len<=0)            {                g[i].push_back(j);                g[j].push_back(i);            }        }    memset(online,0,sizeof(online));    char str[10];    while(scanf("%s",str)!=EOF)    {        if(str[0]=='S')        {            int a,b;            scanf("%d%d",&a,&b);            if(father(a)!=father(b))                puts("FAIL");            else                puts("SUCCESS");        }        else if(str[0]=='O')        {            int u;            scanf("%d",&u);            online[u]=1;            for(int j=0; j<g[u].size(); j++)            {                int v=g[u][j];                if(!online[v])continue;                v=father(v);                if(u==v)continue;                fa[v]=u;            }        }    }}


POJ 2236 Wireless Network

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.