POJ - 2236 Wireless Network (kuangbin - 簡單搜尋)
題目描述(已轉換成中文)
南亞發生了一次地震。ACM (Asia Cooperated Medical 亞洲聯合醫療隊) 已經為膝上型電腦搭建了一個無線網路,但受到了一次不可預知的餘震攻擊,因此網路中的所有電腦都被破壞了。電腦被逐臺修復,網路逐步恢復了工作。由於受到硬體的約束,每臺電腦只能與距離它不超過 d 米的其它電腦直接通訊。但每臺電腦可被看作其它兩臺電腦的通訊中轉點,也就是說,如果電腦 A 和電腦 B 可以直接通訊,或存在一臺電腦 C 既可與 A 也可與 B 通訊,那麼電腦 A 和電腦 B 之間就能夠通訊。
在處理網路修復的過程中,工作人員們在任何一個時刻,可以執行兩種操作:維修一臺電腦,或測試兩臺電腦是否能夠通訊。請您找出全部的測試操作。
輸入格式
第一行包含了兩個整數 N 和 d (1 <= N <= 1001, 0 <= d <= 20000)。此處 N 是電腦的數目,編號從 1 到 N;同時,D 是兩臺電腦之間能夠直接通訊的最大距離。接下來的 N 行,每行包含兩個整數 xi, yi (0 <= xi, yi <= 10000),表示 N 臺電腦的座標。從第 (N+1) 行到輸入結束,是逐一執行的操作,每行包含一個操作,格式是以下兩者之一:
1. “O p” (1 <= p <= N),表示維護電腦 p 。
2. “S p q” (1 <= p, q <= N),表示測試電腦 p 和 q 是否能夠通訊。
輸入不超過 300000 行。
輸出格式
對於每個測試操作,如果兩臺電腦能夠通訊,則列印 “SUCCESS”;否則,列印 “FAIL”。
輸入輸出樣例
輸入
4 1
0 1
0 2
0 3
0 4
O 1
O 2
O 4
S 1 4
O 3
S 1 4
輸出
FAIL
SUCCESS
題目連結
分析:
這道題需要注意的地方:
程式碼如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <map>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn = 1005;
int n, d, vis[maxn][maxn], a[maxn], fu[maxn];
int read(){
int x, f = 1;
char ch;
while(ch = getchar(), ch < '0' || ch > '9') if(ch == '-') f = -1;
x = ch - '0';
while(ch = getchar(), ch >= '0' && ch <= '9') x = x * 10 + ch - 48;
return x * f;
}
struct node{
int x, y;
}u[maxn];
void pre(){
int i, j, dx, dy;
for(i = 1; i <= n; i++){
for(j = i + 1; j <= n; j++){
dx = u[i].x - u[j].x;
dy = u[i].y - u[j].y;
if(dx * dx + dy * dy <= d * d) vis[i][j] = vis[j][i] = 1;
else vis[i][j] = vis[j][i] = 0;
}
}
}
int found(int x){
if(fu[x] == x) return x;
return fu[x] = found(fu[x]);
}
void unit(int x, int y){
if(found(x) == found(y)) return;
else fu[found(x)] = found(y);
}
int main(){
int i ,j, t, x, y;
char c;
n = read();
d = read();
for(i = 1; i <= n; i++){
u[i].x = read();
u[i].y = read();
fu[i] = i;
}
pre();
while(~scanf("%c", &c)){
if(c == 'O'){
t = read();
a[t] = 1;
for(i = 1; i <= n; i++){
if(a[i] && vis[i][t]){
unit(t, i);
}
}
}
else{
x = read();
y = read();
if(found(x) == found(y)) printf("SUCCESS\n");
else printf("FAIL\n");
}
}
return 0;
}
相關文章
- 【簡單搜尋】POJ 2251 Dugeon MasterAST
- kuangbin——QS Network - Preliminary Round
- POJ 1129 Channel Allocation (暴力搜尋)
- Elasticsearch 實現簡單搜尋Elasticsearch
- 百度簡單搜尋PC版玩法攻略 簡單搜尋有電腦版嗎?
- ElasticSearch 簡單的 搜尋 聚合 分析Elasticsearch
- Networking POJ - 1287(kuangbin最小生成樹)
- Pots POJ – 3414 (搜尋+記錄路徑)
- Network(POJ-1144)
- POJ 1861 Network (Kruskal)
- Network of Schools(POJ-1236)
- 簡單檔案搜尋:Find Any File for MacMac
- 自制簡單的詩歌搜尋系統
- POJ1915,雙向寬度優先搜尋
- 單詞搜尋
- laravel 簡單限制搜尋引擎爬蟲頻率Laravel爬蟲
- EasyFind for Mac操作簡單的檔案搜尋工具Mac
- 簡單dp -- Common Subsequence POJ - 1458
- SimpleAISearch:C# + DuckDuckGo 實現簡單的AI搜尋AIC#Go
- POJ 1236 Network of Schools 強連通分量
- 79. 單詞搜尋
- 單詞搜尋問題
- 搜尋排序技術簡介排序
- DFS與BFS——理解簡單搜尋(中文虛擬碼+例題)
- POJ 3694 Network 邊雙連通分量+LCA
- POJ 3259-Wormholes(簡單判負環)Worm
- LeetCode-079-單詞搜尋LeetCode
- Linux 搜尋檔案和資料夾的 4 種簡單方法Linux
- 【Leetcode 346/700】79. 單詞搜尋 【中等】【回溯深度搜尋JavaScript版】LeetCodeJavaScript
- POJ3087 Shuffle'm Up【簡單模擬】
- 文字獲取和搜尋引擎簡介
- 最佳路徑搜尋(二):啟發式搜尋(代價一致搜尋(Dijkstra search),貪心搜尋,A*搜尋)
- 海量資料搜尋---搜尋引擎
- [LeetCode題解]79. 單詞搜尋LeetCode
- MySQL單詞搜尋相關度排名MySql
- Django單元測試與搜尋引擎Django
- Jina:在雲上構建神經網路搜尋的更簡單方法神經網路
- 《ElasticSearch6.x實戰教程》之簡單搜尋、Java客戶端(上)ElasticsearchJava客戶端