模擬賽 妖怪等級考試 題解

2021-09-27 09:08:03 字數 1326 閱讀 1878

妖怪等級考試:

給定乙個無向連通圖,求是否存在兩個點之間存在三條路徑,

並要求輸出路徑。

首先,如果兩個節點之間存在多條不相交路徑,就一定存在乙個環。

所以,這題和找環相關。

只有兩個環之間存在相交的邊,才說明有解。

如圖:

現在關鍵就是如何找到環。

由於無向圖dfs後,只有樹邊和返祖邊,且只有返祖邊才會形成環,所以只要對返祖邊處理就可以了。

每次將第個\(i\)環上所有邊染成\(i\)色,當有乙個邊被染成兩種顏色時,就找到了解。

因為每條邊最多被染一次就會出現解,所以染色可以暴力進行。

如圖:

輸出解時考慮三種情況就可以了。

#include int fr[100010],ne[400010];

int v[400010],bs=0,fa[100010];

bool fz[400010];

int hu[400010],fb[100010];

int h2,x[400010],dfn[100010],tm=0;

int sd[100010],jg[100010];

void addb(int a,int b)

int dfs(int u,int f)

else if(dfn[v[i]]sd[t])

t=v[h2];

int z=v[rt],s=0;

while(1)

printf("%d ",s);

z=v[rt];

while(1)

printf("\n");

int a1=v[h2],a2=v[hu[rt]];

z=t,s=0;

while(1)

z=x[h2];

while(1)

printf("%d ",s);

for(int i=s-1;i>=0;i--)

printf("%d ",jg[i]);

printf("\n");

z=t,s=0;

while(1)

z=x[hu[rt]];

while(1)

printf("%d ",s);

for(int i=s-1;i>=0;i--)

printf("%d ",jg[i]);

}return 0;

}

考試題題解

主講人igl albl 試題t2 t3 t1 t4 t5 暴力 dfs所有路徑,在使用clock的情況下預計 text 題意 給你一張有向圖,距離為 text 的正整數次冪的兩點間可以重新連一條長為 text 邊,求在此情況下的從起點到終點最短路。我們用 text 表示點 text 到點 text ...

考試題解集合

某天忽然發現自己的blog裡全是考試題解 那麼為什麼不鏈到一篇blog裡呢?避免首頁全是加密blog看起來不大友善,大概也會整齊一點。估計是個大工程但還是作死地開始啦。有些難題是單獨寫的,就不鏈了。密碼仍然是開機使用者名稱 入學年份 兩個班級,希望總是能比過去的自己更用心!2018 4月 14 17...

2020 11 25 考試題解

題目描述 有一圈數,其數目為n個,定義一次操作為每個數變為原數圈中的自己與相鄰的兩個數這三個數的異或和,給出原陣列和操作次數,請算出最後的結果陣列。輸入資料 輸入第一行包含兩個正整數n和k,分別表示陣列數目和操作次數。第二行 n 個整數。輸出資料 僅包含一行n個整數。樣例輸入 3 1 1 2 3樣例...