2140: 穩定婚姻
time limit: 2 sec memory limit: 259 mb
submit: 911 solved: 422
[submit][status][discuss]
description
input
第一行為乙個正整數n,表示夫妻的對數;以下n行,每行包含兩個字串,表示這n對夫妻的姓名(先女後男),由乙個空格隔開;第n+2行包含乙個正整數m,表示曾經相互喜歡過的情侶對數;以下m行,每行包含兩個字串,表示這m對相互喜歡過的情侶姓名(先女後男),由乙個空格隔開。
output
輸出檔案共包含n行,第i行為「safe」(如果婚姻i是安全的)或「unsafe」(如果婚姻i是不安全的)。
sample input
【樣例輸入1】
2melanie ashley
scarlett charles
1scarlett ashley
【樣例輸入2】
2melanie ashley
scarlett charles
2scarlett ashley
melanie charles
sample output
【樣例輸出1】
safe
safe
【樣例輸出2】
unsafe
unsafe
【資料規模和約定】
對於100%的資料,所有姓名字串中只包含英文大小寫字母,大小寫敏感,長度不大於8,保證每對關係只在輸入檔案中出現一次,輸入檔案的最後m行不會出現未在之前出現過的姓名,這2n個人的姓名各不相同,1≤n≤4000,0≤m≤20000。
若aa離婚
那麼當a->b,b->c……z->a,那麼每個人都可以配對,所以此婚姻不安全
如果我們發現從a->a都是夫妻,而從a->a都是情人,就能找到上述的路徑,此婚姻不安全
那麼從夫妻從男人向女人建邊,情人從女的向男的建邊,當一對夫妻在乙個強連通分量,就可以找到上述路徑時,那麼婚姻不安全。
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
map mmp;
const
int maxn=12000;
int head[maxn],net[2*maxn],to[2*maxn],cnt;
int dfn[maxn],low[maxn],c[maxn],s[maxn],col,num,top;
bool f[maxn];
void add(int x,int y)
void dfs(int x)
else
if(f[tmp]==1)
} if(low[x]==dfn[x])
top--;
}}int main()
scanf("%d",&m);
for(int i=1;i<=m;i++)
for(int i=1;i<=tot;i++)
if(!dfn[i]) dfs(i);
for(int i=1;i<=tot;i+=2)
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行包含乙個正整數...