洛谷P1407 穩定婚姻(tarjan)

2022-08-15 05:09:12 字數 1193 閱讀 8950

題目意思:有n對夫妻,有m對前男女朋友關係(都是n對夫妻中的人),問每一對夫妻是否婚姻穩定?

婚姻不穩定是指這對夫妻離婚,分別和有舊情的前男女朋友結婚,仍可以使2*n個人構成n對夫妻。

思路:我們將所有 現在或曾經交往過的 男孩和女孩連線起來,可以發現出現了一些環,而處在環中的幾對夫妻都可以更換伴侶,也就是題目中所說的婚姻不安全。那麼我們找出這些環,判斷哪些夫妻處在環中即可。

我們想到tarjan就可以,但是tarjan是在有向圖上進行的。我們怎麼將這個無向圖連線呢?

我們將單向邊表示全部資訊,而只要夫妻和情人之間建圖方向相反,就可以保留原有關係了。

這裡是將:

夫妻之間:girl→boy

情人之間:boy→girl

#include#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

typedef

long

long

ll;map

b,g;

const

int maxn=10005

;const

int maxm=300005

;struct

nodee[maxm];

inth[maxn],vis[maxn],low[maxn],dfn[maxn];

intst[maxn],belong[maxn];

intn,m,cnt,tot,top,num;

void

init()

void add(int u,int

v)void tarjan(int

u)

else

if(vis[v])

low[u]=min(low[u],dfn[v]);

}if(low[u]==dfn[u])

while(t!=u);

}}int

main()

cin>>m;

for(int i=0;i)

for(int i=0;i<2*n;i++)

if(!dfn[i])

tarjan(i);

for(int i=0;i)

return0;

}

洛谷 P1407 穩定婚姻

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

BZOJ2140 穩定婚姻(洛谷P1407)

洛谷題目傳送門 bzoj題目傳送門 乙個unsafe的情況就是把當前邊拆掉後仍然有增廣路。我們把原來夫妻的邊由女方連到男方,舊情的邊由男方連到女方。這樣也是乙個二分圖,但是可能出現環。把這些環縮起來,可以證明如果夫妻都在乙個強連通分量裡就是unsafe的。因為如果在環上斷了一條邊,由於是偶環,一定能...

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

題目大意 有 n 對夫妻和 m 對情人,如果一對情人中的兩人都離婚了,那麼他們可以結為夫妻。對於每一對夫妻,若他們離婚後所有人依然可以結婚,那麼就是不安全的,否則是安全的。問每一對夫妻是否安全。題解 考慮 tarjan 縮點。把圖轉成有向圖,夫妻之間 g b 情人之間 b g tarjan 縮點,最...