ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1045. Забавная игра

Accepted code.
Послано Jumbo 31 дек 2011 01:36
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

vector < vector < int > > g;
vector < bool > d;

void dfs(int v, int p = -1)
{
    if ((int)g[v].size()==1) d[v]=false;
    d[v] = false;
    for (int i = (int)g[v].size()-1; i >= 0; i--)
    {
        int to = g[v][i];
        if (to == p) continue;
        dfs(to,v);
        if (!d[to]) d[v] = true;
    }
}

int main() {
    int n,root;
    scanf("%d%d",&n,&root);
    g.resize(n+1); d.resize(n+1);
    for (int i=1;i<=n-1;i++)
    {
        int u,v; scanf("%d%d",&u,&v);
        g[u].push_back(v);
        g[v].push_back(u);
    }
    for (int i=1;i<=n;i++)
        sort(g[i].begin(),g[i].end());

    dfs(root);
    if (d[root])
    {
        for (int i = 0; i<(int)g[root].size(); i++)
            if (!d[g[root][i]]) { printf("First player wins flying to airport %d",g[root][i]); return 0;}
    }
    puts("First player loses");
    return 0;
}