Форум программистов, компьютерный форум CyberForum.ru

НЛО и графы - C++

Восстановить пароль Регистрация
 
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
25.09.2012, 17:37     НЛО и графы #1
Доброго времени суток.

Не могу сдать эту задачу:

В маленьком городке М начала действовать служба контроля за незаконными полетами НЛО. Первая задача службы - выяснить, сколько НЛО действует в окрестности города.

Агенты службы опросили множество свидетелей и составили список случаев встречи с НЛО, произошедших за одни сутки, с указанием места и времени наблюдения.

Теперь аналитики хотят понять, сколько же на самом деле было НЛО. Из данных разведки известна максимальная скорость, с которой может лететь НЛО. Аналитики просят вас узнать, какое минимальное количество НЛО могли наблюдать свидетели.

Входные данные

На первой строке входного файла INPUT.TXT содержатся целые числа n и v - количество случаев наблюдения и максимальная скорость НЛО (1 ≤ n ≤ 100, 1 ≤ v ≤ 10000). Следующие n строк содержат описания случаев встречи с НЛО в формате «ЧЧ:ММ x y», где ЧЧ:ММ – время встречи, x и y - координаты места, в котором наблюдался НЛО (для простоты будем считать, что все встречи происходили на плоскости). Координаты по модулю не превышают 1000. Скорость выражена в км/ч, координаты - в км.

Выходные данные

В выходной файл OUTPUT.TXT выведите одно число - минимальное возможное количество НЛО.

Собственно, сам код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstdlib>
#include <string>
#include <cstdio>
 
using namespace std;
 
vector<int> g;
 
bool comp(place a, place b){
    return a.s < b.s;
}
 
void dfs(int x,bool* a){
    a[x] = true;
        if(g[x]!= -1 && !a[g[x]])
            dfs(g[x],a);
}
 
int main(){
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
  int n,v,ans = 0;
  cin >> n >> v;
  vector<place> ufo(n);
  g.resize(n);
  for(int i = 0; i < n; ++i)
      g[i] = -1;
  for( int i = 0; i < n; ++i)
    cin >> ufo[i].s >> ufo[i].x >> ufo[i].y;
  sort(ufo.begin(),ufo.end(),comp);
  bool *used = new bool[n];
  for(int i = 0; i < n; ++i)
    used[i] = false;
  for(int i = 0; i < n - 1; ++i)
    for(int j = i + 1; j < n; ++j){
      int h1 = (ufo[j].s[0]-'0')*10 + ufo[j].s[1] - '0', h2 = (ufo[i].s[0]-'0')*10 + ufo[i].s[1] - '0';
      int m1 = (ufo[j].s[3]-'0')*10 + ufo[j].s[4] - '0', m2 = (ufo[i].s[3]-'0')*10 + ufo[i].s[4] - '0';
      if((((h1-h2)*60 + m2 - m1)*v)*(((h1-h2)*60 + m2 - m1)*v) >= 3600*((ufo[j].x-ufo[i].x)*(ufo[j].x-ufo[i].x) + (ufo[j].y - ufo[i].y)*(ufo[j].y - ufo[i].y))&& g[j] == -1){
        g[i] = j;
        g[j] = 0;
        break;
        }
    }
  for(int i = 0; i < n; ++i)
      if(!used[i]){
          dfs(i,used);
          ans+=1;
      }
  cout << ans << endl;
  return 0;
}
План таков:
1.сортирую по времени
2.делаю граф(вершины - координаты встречи, рёбра соединяют ближайшие точки встречи, в которых мог быть один НЛО)
3. с помощью dfs ищу кол-во компонент связности, это и будет ответом

что у меня не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2012, 17:37     НЛО и графы
Посмотрите здесь:

C++ Графы
C++ [C++] графы
C++ Графы
Графы C++
Графы C++
Графы C++
C++ Графы
графы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
25.09.2012, 17:40     НЛО и графы #2
Можете условие скопипастить? у меня по ссылке пишет, что задача не найдена.
Yandex
Объявления
25.09.2012, 17:40     НЛО и графы
Ответ Создать тему
Опции темы

Текущее время: 01:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru