[HihoCoder]#1041 : 国庆出游

来源:互联网 发布:铭万网络到底有多差 编辑:程序博客网 时间:2024/04/19 22:09

华电北风吹
天津大学认知计算与应用重点实验室
2016-06-24

题目链接:
http://hihocoder.com/problemset/problem/1041

题目分析:

// problem1041.cpp : 定义控制台应用程序的入口点。// #1041 : 国庆出游// 张正义 2016-05-14#include "stdafx.h"#include <iostream>#include <vector>#include <deque>#include <stack>#include <queue>using namespace std;void RoadLooking(int start, int end, vector<vector<int>> &map, vector<bool> visited, stack<int> &road, bool &flag){    visited[start] = true;    for (int i = 0; i < map[start].size(); i++)    {        if ((visited[map[start][i]] == false) && (flag==false))        {            if (map[start][i] == end)            {                flag = true;                break;            }            RoadLooking(map[start][i], end, map, visited, road, flag);        }    }    if (flag)        road.push(start);}int main(){    int T;    cin >> T;    while (T--)    {        int n;        cin >> n;        bool badPlan = false;        vector<bool> visit(n, false);        vector<vector<int>> map(n);        for (int i = 1; i < n; i++)        {            int p1, p2;            cin >> p1 >> p2;            p1--;            p2--;            map[p1].push_back(p2);            map[p2].push_back(p1);        }        int m;        cin >> m;        vector<int> visitOrder;        visitOrder.push_back(0);        for (int i = 0; i < m; i++)        {            int id;            cin >> id;            id--;            visitOrder.push_back(id);        }        vector<int> visited(n, 0);        int nextCityNum;        for (int i = 0; i < m; i++)        {            stack<int> road;            vector<bool> subvisited(n, false);            bool flag = false;            RoadLooking(visitOrder[i], visitOrder[i + 1], map, subvisited, road, flag);            while (road.empty() == false)            {                nextCityNum = road.top();                road.pop();                visited[nextCityNum]++;                if (visited[nextCityNum] > 2)                {                    badPlan = true;                    break;                }            }            if (badPlan)                break;        }        if (badPlan)            cout << "NO" << endl;        else            cout << "YES" << endl;    }    return 0;}

解题报告:

0 0
原创粉丝点击