題目大意:有$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...