BZOJ 2140 稳定婚姻
2140: 稳定婚姻
Description
我国的离婚率连续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就是安全的。给定所需信息,你的任务是判断每对婚姻是否安全。
Input
第一行为一个正整数n,表示夫妻的对数;以下n行,每行包含两个字符串,表示这n对夫妻的姓名(先女后男),由一个空格隔开;第n+2行包含一个正整数m,表示曾经相互喜欢过的情侣对数;以下m行,每行包含两个字符串,表示这m对相互喜欢过的情侣姓名(先女后男),由一个空格隔开。
Output
输出文件共包含n行,第i行为“Safe”(如果婚姻i是安全的)或“Unsafe”(如果婚姻i是不安全的)。
Sample Input
2
Melanie Ashley
Scarlett Charles
1
Scarlett Ashley
【样例输入2】
2
Melanie Ashley
Scarlett Charles
2
Scarlett Ashley
Melanie Charles
Sample Output
Safe
Safe
【样例输出2】
Unsafe
Unsafe
【数据规模和约定】
对于100%的数据,所有姓名字符串中只包含英文大小写字母,大小写敏感,长度不大于8,保证每对关系只在输入文件中出现一次,输入文件的最后m行不会出现未在之前出现过的姓名,这2n个人的姓名各不相同,1≤n≤4000,0≤m≤20000。
按照图中所述,正常婚姻中女连男,婚外情中男连女。跑tarjan缩点,看婚姻是否陷入“江局”即可。
/**************************************************************
Problem: 2140
User: Doggu
Language: C++
Result: Accepted
Time:820 ms
Memory:2688 kb
****************************************************************/ #include <cstdio>
#include <string>
#include <map>
#include <algorithm>
#include <iostream>
std::string girl, boy;
std::map<std::string,int> mp; const int N = ;
const int M = ;
struct Edge {int v,upre;}g[M];
int head[N], ne=;
inline void adde(int u,int v) {g[++ne]=(Edge){v,head[u]};head[u]=ne;} int n, m, dfn[N], low[N], idy, stack[N], top, col[N];
bool ins[N], fuck[N];
void tarjan(int u) {
dfn[u]=low[u]=++idy;
stack[++top]=u;ins[u]=;
for( int i = head[u]; i; i = g[i].upre ) {
int v=g[i].v;
if(!dfn[v]) tarjan(v), low[u]=std::min(low[u],low[v]);
else if(ins[v]) low[u]=std::min(low[u],dfn[v]);
}
if(low[u]==dfn[u]) {
int siz=, pos=top;while(stack[pos+]!=u) pos--, siz++;
while(stack[top+]!=u) {
ins[stack[top]]=;
if(siz>=) fuck[stack[top]/]=;top--;
//col[stack[top--]]=u;
}
}
}
int main() {
std::cin >> n;
for( int i = ; i <= n; i++ ) {
std::cin >> girl >> boy;
mp[girl]=i;
mp[boy]=i;
adde(*i,*i+);//偶为♀奇为♂正常偶至奇婚外奇至偶
}
std::cin >> m;
for( int i = ; i <= m; i++ ) {
std::cin >> girl >> boy;
adde(*mp[boy]+,*mp[girl]);
}
for( int i = ; i <= *n+; i++ ) if(!dfn[i]) tarjan(i);
for( int i = ; i <= n; i++ ) if(fuck[i]/*col[2*i]==col[2*i+1]*/) printf("Unsafe\n");else printf("Safe\n");
return ;
}
双倍图 820 ms 2688 kb
/**************************************************************
Problem: 2140
User: Doggu
Language: C++
Result: Accepted
Time:748 ms
Memory:2648 kb
****************************************************************/ #include <cstdio>
#include <string>
#include <map>
#include <algorithm>
#include <iostream>
std::string girl, boy;
std::map<std::string,int> mp; const int N = ;
const int M = ;
struct Edge {int v,upre;}g[M];
int head[N], ne=;
inline void adde(int u,int v) {g[++ne]=(Edge){v,head[u]};head[u]=ne;} int n, m, dfn[N], low[N], idy, stack[N], top;
bool ins[N], fuck[N];
void tarjan(int u) {
dfn[u]=low[u]=++idy;
stack[++top]=u;ins[u]=;
for( int i = head[u]; i; i = g[i].upre ) {
int v=g[i].v;
if(!dfn[v]) tarjan(v), low[u]=std::min(low[u],low[v]);
else if(ins[v]) low[u]=std::min(low[u],dfn[v]);
}
if(low[u]==dfn[u]) {
int siz=, pos=top;while(stack[pos+]!=u) pos--, siz++;
while(stack[top+]!=u) {
ins[stack[top]]=;
if(siz>) fuck[stack[top]]=;top--;
}
}
}
int main() {
std::cin >> n;
for( int i = ; i <= n; i++ ) {
std::cin >> girl >> boy;
mp[girl]=i;
mp[boy]=i;//偶为♀奇为♂正常偶至奇婚外奇至偶
}
std::cin >> m;
for( int i = ; i <= m; i++ ) {
std::cin >> girl >> boy;
adde(mp[boy],mp[girl]);
}
for( int i = ; i <= n; i++ ) if(!dfn[i]) tarjan(i);
for( int i = ; i <= n; i++ ) if(fuck[i]) printf("Unsafe\n");else printf("Safe\n");
return ;
}
单倍图 748 ms 2648 kb
BZOJ 2140 稳定婚姻的更多相关文章
- bzoj 2140: 稳定婚姻 (二分图)
//========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/ 转载要声明! //=============== ...
- BZOJ 2140 稳定婚姻 ——二分图
论二分图的可行边与必须边. 考虑用dinic增广之后的图,一些是必要的割边,一些是可行的割边. 我们首先求出一组可行的最大匹配,那么这些变都是可行的. 然后我们求一遍强连通分量. 如果 scc[u]! ...
- 2140: 稳定婚姻 - BZOJ
Description 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的姗姗和男友谈恋爱半年就 ...
- 【BZOJ】2140 稳定婚姻
[解析]Hash,离散化.Tarjan [分析] 对于每一个名字.首先离散化成编号. 用hash或者其它,反正不要最主要的即可了.否则O(N^2L)会爆掉. 然后请參考:http://www.cnbl ...
- BZOJ2140: 稳定婚姻
题解: 题意就是求二分图的必须边. 我们有结论: 在残量网络上跑tarjan,对于一条边(u,v) 如果该边满流||scc[u]==scc[v],那么该边是可行边. 因为如果scc[u]==scc[v ...
- BZOJ2140: 稳定婚姻(tarjan解决稳定婚姻问题)
2140: 稳定婚姻 Time Limit: 2 Sec Memory Limit: 259 MBSubmit: 1321 Solved: 652[Submit][Status][Discuss] ...
- [BZOJ3816][清华集训2014]矩阵变换(稳定婚姻问题)
3816: 矩阵变换 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 803 Solved: 578[Submit][Status][Discuss] ...
- 【HDU1914 The Stable Marriage Problem】稳定婚姻问题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1914 题目大意:问题大概是这样:有一个社团里有n个女生和n个男生,每位女生按照她的偏爱程度将男生排序, ...
- UVA 1175 Ladies' Choice 稳定婚姻问题
题目链接: 题目 Ladies' Choice Time Limit: 6000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu 问题 ...
随机推荐
- textarea拖拽控制
一.用处 textarea默认时允许用户以拖拽形式来改变textarea大小,但textarea的大小变化会撑大其父节点,有时会破坏整体布局,有时我们并不希望textarea随意拖拽. forklif ...
- linux后退文件夹命令
后退文件夹: cd - 在重复一遍就是前进了
- 记事本APP之Alpha报告
项目名称 记事本APP 项目版本 Alpha版本 负责人 北京航空航天大学计算机学院 Echo软件团队 联系方式 http://www.cnblogs.com/echo-buaa/ 要求发布日期 20 ...
- youi软件测试计划
beta版本中,我们将重视软件开发中的测试. 我们的软件是需要测试的,不测试怎么知道好与不好呢?有的程序不测试甚至都不能运行-- 我们的目标呢:就是经过测试之后软件的质量得到有效的保证.不管什么情况都 ...
- rua出300道四则运算题
- Week 2
第1章:概论1.原文“这些软件企业的商业模式有些事合情合理也合法:有些看似合情合理,但不怎么合法:有些做法不合 理,但是还没有出台相关的法律.在相关法律完善之前,软件行业还有一个行规,即应该有职业道德 ...
- MySql点点滴滴(一)之可视化工具介绍
以下的文章主要介绍的是10个可以简化开发过程的MySQL工具,其中包括MySQL Workbench.phpMyAdmin.Aqua Data Studio,以及SQLyog与MYSQL Front等 ...
- aes python加密
# *_*coding:utf-8 *_* #AES-demo import base64 from Crypto.Cipher import AES ''' 采用AES对称加密算法 ''' # st ...
- 常见meta标签记录
关于meta <meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标签位于文档的头部,不包含 ...
- Window环境下搭建Vue.js开发环境
原文链接:http://blog.csdn.net/solo95/article/details/72084907 笔者最近在进行前端的学习,在点完了HTML5.CSS3.JavaScript等技能树 ...