Світлофори#993

Світлофори (Розбір)

Система перехресть та тунелів природним чином задає граф: перехрестя є вершинами, а тунелі — ребрами. Оскільки тунелі двонапрямлені, граф є неорієнтованим.

Кількість світлофорів, що встановлюються на -му перехресті, дорівнює степеню вершини , тобто числу тунелів, інцидентних цьому перехрестю.

Заведемо масив , де — кількість тунелів, що прилягають до -го перехрестя. Тоді для кожного неорієнтованого ребра необхідно збільшити значення та на одиницю.

Приклад

Граф, наведений у прикладі, має наступний вигляд:

Реалізація алгоритму

Оголосимо масив , в якому зберігатимемо інформацію про тунелі.

#define MAX 110
int ton[MAX];

Зчитуємо вхідні дані. Послідовно обробляємо кожен тунель, збільшуючи степені відповідних вершин графа.

scanf("%d %d",&n,&m);
memset(ton,0,sizeof(ton));
for (i = 0; i < m; i++)
{
  scanf("%d %d",&a,&b);
  ton[a]++; ton[b]++;
}

Виводимо кількість світлофорів, необхідних на кожному перехресті.

for (i = 1; i <= n; i++)
  printf("%d ",ton[i]);
printf("\n");