POJ 2236ワイヤレスネットワークの問題解決レポート互いに素セット

POJ 2236ワイヤレスネットワーク問題解決レポート

問題解決のアイデア:ベクターは、コンピュータごとに設定されている基準コンピュータの距離d内のストレージからコンピュータ、コンピュータが修復されている場合、これらのコンピュータは、コンピュータに接続されています。
ここに画像を挿入説明

#include<iostream>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
#include<map>
#include<stack>
#include<stdio.h>
#include<cstdio>
#include<stdlib.h>
#include<fstream>
#include<iomanip>
#include<vector>
#pragma warning(disable:4996)
#define INF 0x3f3f3f3f
#define ll long long
#define PI acos(-1.0)
const int N = 200010;
const int maxn = 1e5+10;
using namespace std;
int n, d;
int father[1005],visit[1005];
vector<int>v[1005];
struct node {
	int x, y;
}pos[1005];
int find(int t)
{
	while (t != father[t])
	{
		t = father[t];
	}
	return t;
}
void connect(int a, int b)
{
	int m = find(a);
	int n = find(b);
	father[m] = n;
}
void solve(int x, int y)
{
	int m = find(x);
	int n = find(y);
	if (m != n)
		cout << "FAIL" << endl;
	else
		cout << "SUCCESS" << endl;
}
int main()
{
	scanf("%d%d", &n, &d);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d%d", &pos[i].x, &pos[i].y);
		father[i] = i;
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			if (i == j)
				continue;
			double sum = sqrt((pos[j].x - pos[i].x) * (pos[j].x - pos[i].x) + (pos[j].y - pos[i].y) * (pos[j].y - pos[i].y));
			if (sum <= d)
				v[i].push_back(j);
		}
	}
	char ch;
	int id,x, y;
	while (~scanf("%c", &ch))
	{
		if (ch == 'O')
		{
			scanf("%d", &id);
			visit[id] = 1;
			for (int i=0; i<v[id].size();i++)
			{
				int tem = v[id][i];
				if (1 == visit[tem])
					connect(id, tem);
			}
		}
		else if (ch == 'S')
		{
			scanf("%d%d", &x, &y);
			solve(x, y);
		}
	}
}



公開された64元の記事 ウォンの賞賛0 ビュー1444

おすすめ

転載: blog.csdn.net/weixin_45566331/article/details/104905817