魔方俱樂部

2021-09-29 00:03:21 字數 3258 閱讀 2400

fateice 來到了魔方俱樂部旅行。

魔方俱樂部有n個分部,每個分部均有且僅有乙個蟲洞,但是這蟲洞只能通往乙個分部。

每個分部有乙個 orzfang 價值,第i個分部的 orzfang 價值為a[i]。

現在他想知道,從第i個分部出發,並只通過蟲洞前往下乙個分部,orzfang 價值之和最多是多少(到達乙個分部多次只計算1次 orzfang 價值)。

輸入格式

第一行為乙個正整數n 。

第二行有n個非負整數a[i] ,表示了每個分部的 orzfang 價值。

第三行有n個正整數f[i] ,表示通過第i個分部的蟲洞所到達的分部為f[i] ,可能出現f[i]=i的情況。

輸出格式

包括n行,第i行包含乙個非負整數,表示從第i個分部出發,orzfang 價值之和的最大值為多少。

樣例樣例輸入

85 4 3 2 1 1 1 1

2 3 1 1 2 7 6 8

樣例輸出

1212

1214132

21資料範圍與提示

對於20%的資料,n≤10。

對於40%的資料,n≤1000。

對於100%的資料,1≤n≤2e5,1≤ai≤104

首先看到這種帶環的,而且i只會有乙個f[i],

蒟蒻就自然而然的想到了tarjan,對於這種環也就是強連通分量,

於是就往下寫了縮點,最後用記憶化搜尋去得到每乙個i的ans

可就是莫名其妙就mle,

如果有大佬知道蒟蒻mle於何處,必當萬分感謝!!!

}ac思路就是,通過題意,很容易發現資料長得是格外好看

描述一下就是多個環,然後環上套了幾條鏈

極端資料f[i]=i,就有可能是一條單鏈加乙個自環,也不影響

對於這種一條條的單鏈,我們可以思考拓撲排序,甩到棧裡面去

為什麼是棧呢?

因為棧是先進後出,後進先出,我們正好要得到後進的f[i]答案再去更新i的答案

然後,就只剩下乙個又乙個互不打擾的環了,

因為是環,所以從環上任意乙個點都可以開始搜尋更新答案

我們可以用佇列來模擬,把這個環上的節點在dfs更新ans的時候

順便記錄一下經過哪些節點,最後把佇列清空的時候就順便更新一下ans[i]

環處理好了的話就回到了之前棧的處理上,從後往前掃棧,直接更新ans[i]就可以了

可以保證i能走到的蟲洞都已經有了答案

#include

#include

#include

using

namespace std;

#define maxn 200005

queue <

int> q;

stack <

int> sta;

int n;

int d[maxn]

, f[maxn]

, orz[maxn]

, ans[maxn]

;bool vis[maxn]

;void top_sort ()}

void dfs (

int u,

int root )

void circle ()}

}int

main()

top_sort ();

circle ();

while

(! sta.

empty()

)for

(int i =

1;i <= n;i ++

) printf (

"%d\n"

, ans[i]);

return0;

}

就這樣就能ac,所以為什麼我的tarjan不可以,啊啊啊啊!!!

魔方俱樂部

我終於a了。還是靠旁邊大佬的百般幫助 太菜了,真的太菜了。首先,我們應該仔細審題!審題不過關的我,在乙個錯誤的題目上耗了乙個下午連樣例都沒有過!tcl 這題的重點有且僅有乙個 乙個點只會通向乙個節點!那麼我們可以發現,整張圖其實是幾個環和幾個通向環的鏈組成!然後上馬吧!include include...

俱樂部活動 2007 06 03

為了便於廣大會員交流,定於 2007年6 月3 日舉行乙個小型技術交流會 每個主題10分鐘左右時間 活動主題為展示各位會員的作品或者一些心得體會 可以是自己平時的作品,也可以單獨寫乙個小軟體,也可以採用文件展示自己的心得體會,如有 demo 請事先準備好 本次活動採用網上報名確認的方式,待確認之後方...

魔方陣1 奇階魔方陣

魔方陣 古代又稱 縱橫圖 是指組成元素為自然數1 2 n2的平方的n n的方陣,其中每個元素值都不相等,且每行 每列以及主 副對角線上各n個元素之和都相等。魔方陣分為奇階魔方陣和偶階魔方陣,偶階魔方陣又分為能被四整除和不能被四整除兩種,今天來給大家講解奇階魔方陣,後續會為大家補充剩餘的魔方陣。奇階魔...