Codeforces 34C Page Numbers (simple graph theory + DFS)

Source: Internet
Author: User

D. Road Maptime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output

Cities in Berland. Each city has its index-an integer number from to n. The capital has index r. All the roads in Berland are two-way. the road system is such that there is exactly one path from the capital to each city, I. e. the road map looks like a tree. in Berland's chronicles the road map is kept in the following way: for each city I, Different from the capital, there is kept number pI-Index of the last city on the way from the capital to I.

To city r. Naturally, after this old representation of the road map in Berland's chronicles became incorrect. Please, help the king find out a new representation of the road map in the way described above.

Input

, R, R(NLimit ≤ limit 5 · 10, limit 1 limit ≤ limitR  =RLimit ≤ limitN)-Amount of cities in Berland, index of the old capital and index of the new one, correspondingly.

Container-Progress 1 space-separated integers-the old representation of the road map. For each city, apart from r, There is given integer pI-Index of the last city on the way from the capital to city I. All the cities are described in order of increasing indexes.

Output

Parameter-percent 1 numbers-new representation of the road map in the same format.

Sample test (s) input
Output
Input
Output

It is hard to understand. n cities numbered 1-n are now migrating from the capital r1 to the Capital r2. Before the migration, there is a map indicating the country, each vertex corresponds to its precursor, and the capital does not skip the precursor. Ask about the map representation method after migration. A graph must be a spanning tree (n-1 edges)

Idea: each vertex is connected to the frontend to form a graph. Traverse from the new capital and record the answer during the traversal process.

Code:

#include <stdio.h>#include <string.h>#include <algorithm>#include <vector>using namespace std;const int N = 100005;int n, r1, r2, sb;vector<int> g[N];int du[N], i;int vis[N];int ans[N];void dfs(int now) {vis[now] = 1;for (int i = 0; i < g[now].size(); i++) {int v = g[now][i];if (vis[v]) continue;ans[v] = now;dfs(v);}}int main() {memset(vis, 0, sizeof(vis));memset(du, 0, sizeof(du));memset(g, 0, sizeof(g));scanf("%d%d%d", &n, &r1, &r2);for (i = 1; i <= n; i++) {if (i == r1) continue;scanf("%d", &sb);g[i].push_back(sb);g[sb].push_back(i);du[i]++; du[sb]++;}dfs(r2);int bo = 0;for (i = 1; i <= n; i++) {if (i == r2) continue;if (bo++) printf(" ");printf("%d", ans[i]);}printf("\n");return 0;}


Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.