題目意思:有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 縮點,最...