bzoj2140 穩定婚姻 強連通分量

2021-08-21 19:16:57 字數 2493 閱讀 5908

我國的離婚率連續7年上公升,今年的頭兩季,平均每天有近5000對夫婦離婚,大城市的離婚率上公升最快,有研究婚

姻問題的專家認為,是與簡化離婚手續有關。25歲的姍姍和男友談戀愛半年就結婚,結婚不到兩個月就離婚,是典

型的「閃婚閃離」例子,而離婚的導火線是兩個人爭玩電腦遊戲,丈夫一氣之下,把電腦炸爛。有社會工作者就表

示,80後求助個案越來越多,有些是與父母過多干預有關。而根據民政部的統計,中國離婚五大城市首位是北京,

其次是上海、深圳,廣州和廈門,那麼到底是什麼原因導致我國成為離婚大國呢?有專家分析說,中國經濟急速發

生活給人們施加的壓力越來越大,離婚率的不斷公升高已成為現代社會的一大問題。而其中有許許多多的個案是由婚

姻中的「不安定因素」引起的。妻子與丈夫吵架後,心如絞痛,於是尋求前男友的安慰,進而夫妻矛盾激化,最終

以離婚收場,類似上述的案例數不勝數。我們已知n對夫妻的婚姻狀況,稱第i對夫妻的男方為bi,女方為gi。若某

男bi與某女gj曾經交往過(無論是大學,高中,亦或是幼兒園階段,i≠j),則當某方與其配偶(即bi與gi或bj與

gj)感情出現問題時,他們有私奔的可能性。不妨設bi和其配偶gi感情不和,於是bi和gj舊情復燃,進而bj因被戴

綠帽而感到不爽,聯絡上了他的初戀情人gk……一串串的離婚事件像多公尺諾骨牌一般接踵而至。若在bi和gi離婚的

前提下,這2n個人最終依然能夠結合成n對情侶,那麼我們稱婚姻i為不安全的,否則婚姻i就是安全的。給定所需

資訊,你的任務是判斷每對婚姻是否安全。

第一行為乙個正整數n,表示夫妻的對數;

以下n行,每行包含兩個字串,表示這n對夫妻的姓名(先女後男),由乙個空格隔開;

第n+2行包含乙個正整數m,表示曾經相互喜歡過的情侶對數;

以下m行,每行包含兩個字串,表示這m對相互喜歡過的情侶姓名(先女後男),由乙個空格隔開。

所有姓名字串中只包含英文大小寫字母,大小寫敏感,長度不大於8,

保證每對關係只在輸入檔案中出現一次,輸入檔案的最後m行不會出現未在之前出現過的姓名,

這2n個人的姓名各不相同,

1≤n≤4000,0≤m≤20000。

輸出檔案共包含n行,第i行為「safe」(如果婚姻i是安全的)或「unsafe」(如果婚姻i是不安全的)。

【樣例輸入1】

2melanie ashley

scarlett charles

1scarlett ashley

【樣例輸入2】

2melanie ashley

scarlett charles

2scarlett ashley

melanie charles

【樣例輸出1】

safe

safe

【樣例輸出2】

unsafe

unsafe

思維難度:noip+

**難度:noip+

常數小的方法:

#include#include#include#include#include#define ll long long

using namespace std;

const int maxn=4005;

struct nodee[maxn*maxn*2];

int man,woman,h[maxn*2],dfn[maxn*2],low[maxn*2],cnt,ti,ins[maxn*2],col[maxn*2];

mapmp;

stackq;

void add(int u,int v)

inline int mn(int x,int y)

scanf("%d\n",&m);

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

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

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

else

} return 0;

}

常數大的方法:

#include#include#include#include#include#define ll long long

using namespace std;

const int maxn=4005;

struct nodee[maxn*maxn*2];

int man,woman,h[maxn*2],dfn[maxn*2],low[maxn*2],cnt,ti,ins[maxn*2],col[maxn*2];

mapmp;

stackq;

void add(int u,int v)

inline int mn(int x,int y)

scanf("%d\n",&m);

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

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

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

if(fg==0)

else

}return 0;

}

bzoj 2140 穩定婚姻

查詢二分圖每一條邊是否一定在二分圖最大匹配上 首先任意乙個最大匹配,然後把兩個匹配點縮成乙個點,然後用這個圖跑強連通分量,如果乙個點所在的強連通分量大小大於1,那麼說明原圖存在一條匹配邊 非匹配邊 匹配邊 非匹配邊的環,所以這些邊不一定在最大匹配上。include include include i...

BZOJ2140 穩定婚姻

暴力點的我們可以每次拆一對然後跑匈牙利看看能不能跑出來,可以過 然後我們發現匈牙利能跑出來的條件是有乙個環,所以tarjan就可以了 include include include include include include include include include include inc...

BZOJ 2140 穩定婚姻

time limit 2 sec memory limit 259 mb submit 771 solved 359 submit status discuss 第一行為乙個正整數n,表示夫妻的對數 以下n行,每行包含兩個字串,表示這n對夫妻的姓名 先女後男 由乙個空格隔開 第n 2行包含乙個正整數...