洛谷P1407 國家集訓隊 穩定婚姻

2022-05-24 01:30:07 字數 1187 閱讀 5187

題目大意:有$n$對夫妻和$m$對情人,如果一對情人中的兩人都離婚了,那麼他們可以結為夫妻。對於每一對夫妻,若他們離婚後所有人依然可以結婚,那麼就是不安全的,否則是安全的。問每一對夫妻是否安全。

題解:考慮$tarjan$縮點。把圖轉成有向圖,夫妻之間$g->b$,情人之間$b->g$,$tarjan$縮點,最後判斷每一對夫妻是否在同乙個強連通分量內($size>1$),如果在就是不安全(連成了乙個環),反之安全。

卡點:1.$tarjan$中當$dfn_v$訪問過時,未判斷$v$是否在$stack$內

c++ code:

#include #include #include #define pis pair#define mp make_pair

#define maxn 8010

#define maxm 40010

using namespace std;

mapname;

int n, nn, m, name_idx;

string name_p[maxn];

int head[maxn], cnt;

struct edge e[maxm << 1];

void add(int a, int b) ; head[a] = cnt;

}int dfn[maxn], low[maxn], stack[maxn], tot, idx;

int res[maxn], res_idx, sz[maxn];

bool ins[maxn];

inline int min(int a, int b)

void tarjan(int u) else if (ins[v]) low[u] = min(low[u], dfn[v]);

} if (dfn[u] == low[u]) while (v != u);

sz[res_idx] = siz; }}

int main()

cin >> m;

for (int i = 0; i < m; i++)

for (int i = 1; i <= nn; i++)

for (int i = 1; i <= n; i++)

return 0;

}

P1407 國家集訓隊 穩定婚姻

國家集訓隊 穩定婚姻 嚴重懷疑這道題是用來虐狗的 給出 2 times n 個點,n 對點之間的關係 1 以及 m 對點的之間的關係 2 倘若有兩對滿足關係 1 的點能重新組成兩對滿足關係 2 的點,就輸出unsafe,否則輸出safe。同時題目中的點也分為兩類,一種是 男性 節點,一種是 女性 節...

題解 洛谷P1407 國家集訓隊 穩定婚姻

題面 很好的 tarjan 練習題。主要講一下如何建圖。先用 stl map 把每個人的名字對映成數字。輸入第 i 對夫妻時把女性對映成 i 把男性對映成 i n 輸入相互喜歡過的情侶時將男性向女性連邊。然後 tarjan 判斷 i 與 i n 是不是在同乙個強連通分量裡即可。今天是七夕節誒 inc...

洛谷 P1407 穩定婚姻

題目大意 我們已知n對夫妻的婚姻狀況,稱第i對夫妻的男方為bi,女方為gi。若某男bi與某女gj曾經交往過 i j 則當某方與其配偶 即bi與gi或bj與gj 感情出現問題時,他們有私奔的可能性。設bi和其配偶gi感情不和,於是bi和gj舊情復燃,進而bj因被戴綠帽而感到不爽,聯絡上了他的初戀情人g...