2020去世模擬賽2 Freda的迷宮

2022-05-08 05:00:09 字數 1306 閱讀 4641

freda是乙個迷宮愛好者,她利用業餘時間建造了許多迷宮。每個迷宮都是由若干房間和走廊構成的,每條走廊都連線著兩個不同的房間,兩個房間之間最多只有一條走廊直接相連,走廊都是雙向通過。

黃昏時候,freda喜歡在迷宮當中漫步。每天,resodo都會為freda設計乙個挑戰方案。resodo會指定起點和終點,請freda來找到一條從起點到終點的簡單路徑。一條簡單路徑定義為乙個房間序列,每個房間至多在序列裡出現一次,且序列中相鄰的兩個房間有走廊相連。當起點和終點之間存在且僅存在一條簡單路徑的時候,freda認為這個挑戰方案是rd的。現在,請你幫幫resodo來寫乙個程式,判斷乙個挑戰方案是否是rd的。

第一行三個整數n,m,q.分別表示房間數,走廊數,詢問數。

接下來m行每行2個整數x,y, 01,3之間只有一條路徑 1->2->3

1,5之間有兩條路徑 1->2->5 ; 1->2->4->5

1,6之間沒有路徑

對於30%的資料,n<=100, m<=1000, q<=100.

對於50%的資料,n<=1000, m<=10000, q<=1000.

對於100%的資料,n<=10000, m<=100000, q<=10000.

感覺好久沒寫割邊系列的題了,現在板子都不會打了。(我好菜啊)

我們發現如果連線\(u\)與\(v\)的簡單路徑上的邊不是橋的話,就一定會有另外的路徑也可以聯通\(u\)和\(v\)。

我們求出所有的橋,並將聯通的橋所涉及的點做乙個並查集。最後就可以直接查詢了。

#include #include #include using namespace std;

const int n = 10002, m = 100002;

int f[n], tot, dfn[n], low[n], cnt, n, m, q, head[n], dot[m << 1], nxt[m << 1];

int read()

while(s <= '9' && s >= '0')

return x * f;

}void addedge(const int u, const int v)

int findset(const int x)

void unionset(const int u, const int v)

void makeset()

void tarjan(const int u, const int ba)

}}int main()

tarjan(1, 0);

while(q --)

return 0;

}

2020天梯賽模擬賽

include using namespace std intmain void include using namespace std intmain void include using namespace std intmain void cout a b endl return0 inclu...

天梯賽賽前模擬賽補題 2020

一 暢通工程之最低成本建設問題 這道題是用最小生成樹做的,之前最小生成樹練的很少,比賽時沒寫出來,也沒考慮用最小生成樹,還是練得少。這個題可以用kruskal演算法做,先將每條路的花費從小到大排序,然後再從頭開始加每條邊花費的 從頭開始用並查集判斷兩個點的根節點是否相同,如果相同說明出現了環,就co...

集訓模擬賽2

題目描述 這裡 b 表示該格仔放的物件黑色面朝上 w 表示該格仔放的物件白色朝上。如果我們選擇翻轉第三行的第乙個物件,那麼格仔狀態將變為 bwbw bwww wwwb wwwb 遊戲的目標是翻轉到所有的物件白色朝上或黑色朝上。你的任務就是寫乙個程式來求最少的翻轉次數來實現這一目標。輸入格式 輸入檔案...