Codeforces 34C Page Numbers(簡單圖論+DFS)

來源:互聯網
上載者: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 the 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 (n ≤ 5·10, 1 ≤ r ≠ r ≤ n) — amount of cities in Berland, index of the old capital and index of the new one, correspondingly.

 - 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

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

Sample test(s)input
output
input
output

題意:很不好理解,n個城市編號1-n,現在要從首都r1遷徙到首都r2,遷徙前有一個表示國家的地圖,地圖的表示方法為,每個點對應的是他的前驅,首都無前驅跳過,問遷徙後的地圖表示方法。圖必然是一棵產生樹(n-1條邊)

思路:每個點對應前驅相連,這樣就能構成圖了,在從新的首都往後遍曆,遍曆過程中記錄下答案。

代碼:

#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;}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.