日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

A - Wireless Network-poj2236(简单并查集)

發布時間:2023/10/11 综合教程 90 老码农
生活随笔 收集整理的這篇文章主要介紹了 A - Wireless Network-poj2236(简单并查集) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說是有N個村莊,剛開始每個村莊的網絡都是受損狀態,于是派一個人去修理,修理過的村莊只能聯系距離他們半徑為D的村莊,當然他們可以通過一些村莊當中轉站,聯系。
 
輸入先輸入一個N表示有N個村莊,還有一個D表示每個村莊的最大通訊半徑,接著有一系列的修復操作和查詢操作,如果兩個地方不通那么很明顯應該輸出FALL,否則SUCCESS。
 
題意已經很明確了,就是修復查詢,修復好一個點后與其他修復后的點對比一下看看是否能連接成功。
 
 
/////////////////////////////////////////////////////////////////////////
時間用了3S,懶得優化了,優化方法可以搞一個數組轉來保存已經修復的額點,這樣判斷起來少了很多冗余
 
#include<stdio.h>

const int maxn  = ;

struct node
{
    int x, y, ok;
}p[maxn];//保存所有的村莊,ok表示是否已經修復 int f[maxn]; int Len(node a, node b)//求兩個村莊的距離
{
    return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int Find(int x)
{
    if(f[x] != x)
        f[x] = Find(f[x]);
    return f[x];
} int main()
{
    int i, N, D, u, v;
    char s[];     scanf("%d%d", &N, &D);     D = D*D;//因為距離只做判斷,所以直接用平方數判斷更準確,避免小數     for(i=; i<=N; i++)
    {
        scanf("%d%d", &p[i].x, &p[i].y);
        p[i].ok = ;
        f[i] = i;
    }     while(scanf("%s", s) != EOF)
    {
        if(s[] == 'O')
        {
            scanf("%d", &u);             if(p[u].ok == )
            {
                p[u].ok = ;
                for(i=; i<=N; i++)
                {
                    if(u != i && p[i].ok && Len(p[i], p[u]) <= D)
                    {
                        v = Find(i);
                        int k = Find(u);
                        f[k] = v;
                    }
                }
            }         }
        else
        {
            scanf("%d%d", &u, &v);
            u = Find(u);
            v = Find(v);             if(u != v)
                printf("FAIL\n");
            else
                printf("SUCCESS\n");
        }
    }     return ;

}

重構了一下代碼,試圖弄出來并查集的模版,不過不是太理想

#include<stdio.h>

const int maxn = 1e3+;

struct FindSets
{
int *Father, size; FindSets(int size)
: size(size)
{
Father = new int[size+];
for(int i=; i<=size; i++)
Father[i] = i;
}
~FindSets()
{
delete[] Father;
}
int Find(int x)
{
if(Father[x] != x)
Father[x] = Find(Father[x]);
return Father[x];
}
bool connect(int u, int v, bool need)
{///判斷兩個點是否相連,如果需要相連則連接
u = Find(u);
v = Find(v);
if(need == true)
Father[v] = u;
return u == v;
}
}; struct point
{
int x, y, fine;
}; bool Dis(point &a, point &b, int D)
{///判斷兩點之間的距離是否大于D
return ((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)) <= D*D;
} void Repair(int u, int D, point p[], FindSets &fs)
{///修復點u
for(int i=; i<=fs.size; i++)
{
if(p[i].fine == true && Dis(p[i], p[u], D))
fs.connect(i, u, true);
}
p[u].fine = true;
} int main()
{
int N, D; scanf("%d%d", &N, &D); FindSets fs(N);
point *p = new point[N+](); for(int i=; i<=N; i++)
scanf("%d%d", &p[i].x, &p[i].y); int u, v;
char op[]; while(scanf("%s", op) != EOF)
{
if(op[] == 'O')
{
scanf("%d", &u);
Repair(u, D, p, fs);
}
else
{
scanf("%d%d", &u, &v);
if(fs.connect(u, v, false) == true)
printf("SUCCESS\n");
else
printf("FAIL\n");
}
} delete[] p; return ;
}

總結

以上是生活随笔為你收集整理的A - Wireless Network-poj2236(简单并查集)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本人妻不卡一区二区三区中文字幕 | 草草色 | 国产无码精品在线播放 | 久久久久美女 | 精品视频一区二区三区 | 国产日韩精品一区二区三区 | 性活交片大全免费看 | 亚洲最大的成人网站 | 超碰97国产 | 黄色小说视频网站 | 亚洲日本精品视频 | 实拍女处破www免费看 | 亚洲人吸女人奶水 | 亚洲国产福利 | 一区二区三区波多野结衣 | 亚洲自偷自偷偷色无码中文 | av网站免费在线播放 | 91xxx在线观看 | 亚洲欧美日韩久久 | 国精产品一区一区三区视频 | 精品少妇久久久久久888优播 | 涩涩网站在线 | 国产91精品欧美 | 粉色午夜视频 | 插插宗合网| 亚洲激情在线观看视频 | 一级特黄高清 | 国产污污网站 | 久久av在线 | 日本在线 | 中国少妇无码专区 | 日一日干一干 | 国产欧美视频一区二区三区 | 激情网站在线 | 久久一级视频 | 成人中文字幕+乱码+中文字幕 | kendra lust free xxx| 亚洲AV成人无码电影在线观看 | 涩涩涩在线视频 | 激情小说在线观看 | 裸体一区二区 | 销魂美女一区二区 | 激情欧美一区二区 | jizzz18 | 日日综合网 | 日啪| 美女热逼| 色播五月激情 | 日本高清视频在线播放 | 中文字幕乱码亚洲精品一区 | 91禁蘑菇在线看 | 日韩免费精品视频 | 日韩视频 中文字幕 | 中文字幕制服诱惑 | 亚洲黄色成人网 | 四虎tv| 一区二区三区视频在线观看免费 | 97超碰碰 | 久久11| 久久久全国免费视频 | av播放在线 | 深夜福利视频网站 | 欧美 日韩 中文字幕 | 九一福利视频 | 美女大bxxxxn内射 | 97超碰在线免费观看 | www网站在线观看 | 免费观看a毛片 | 久久久精品视频网站 | 亚洲欧美成人一区二区三区 | 欧美精品在线视频观看 | 欧美亚洲视频一区 | 碧蓝之海动漫在线观看免费高清 | 欧美极品喷水 | 欧美激情亚洲激情 | 亚洲欧美影院 | 成人久久 | 亚洲经典av | 草久av| 欧美综合自拍亚洲综合图片区 | 激情戏网站 | 日韩欧美视频一区二区三区 | 日韩欧美大片 | 免费观看成人鲁鲁鲁鲁鲁视频 | 午夜成人影视 | 国产99对白在线播放 | 欧美精品在线一区 | 久久久久久久久久久久久久久久久久久 | 看欧美一级片 | 欧美精品h | 久久久久青草 | 麻豆蜜桃av| 国产精品一区二区不卡 | porn麻豆| 大胸美女啪啪 | 日本不卡一二三 | 成人精品在线视频 | 欧美在线中文 | 男女插插插网站 |