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 问题 ...
随机推荐
- 基于spec评论作品
组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶 刘佳瑞 公冶令鑫 杨磊 杨金铭 张宇 卢帝同 一.测试目标:拉格朗日2018——飞词 下面是他们的小游戏在运行时的一些截图画面: 1.开始: ...
- Daily Scrum9 11.13
昨天的任务已完成. 今日任务: 姓名 今日任务 时长 徐钧鸿 测试SQL包里的代码 2h 张艺 继续搭建还没搭建完的框架 修复bug 2h 黄可嵩 继续进行搜索响应编写 2h 徐方宇 搭建框架 修改b ...
- Daily Scrumming* 2015.10.24(Day 5)
一.总体情况总结 从今天开始,我们开始正式进入紧锣密鼓的集中开发周啦~~加油Fighting~ 开会讨论了一下各个人的细致分工,前端后端各自想成员分派任务. 继续各自领域的准备工作,同时开始进行开发. ...
- 实验五 Java网络编程及安全 实验报告 20135232王玥
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序与设计 班级:1352 姓名:王玥 学号:20135232 成绩: 指导 ...
- 20162327WJH第二次实验——树
20162327WJH第一次实验--线性结构 实 验 报 告 实 验 报 告 课程:程序设计与数据结构 班级: 1623 姓名: 王旌含 学号:20162327 成绩: 指导教师:娄嘉鹏 王志强 实验 ...
- 第二阶段Sprint冲刺会议10
进展:把所有功能整合到主界面,结果导致视频只能播放不能录制,闹钟加不进去,导致闹钟功能差点不能用,放弃整合.
- bata5
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- 20181126-java-面试知识-收集
链接:最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备 两本书的链接:Java Web轻量级开发面试教程和Java核心技术及面试指南.
- Vue2.0组件之间通信(转载)
Vue中组件这个特性让不少前端er非常喜欢,我自己也是其中之一,它让前端的组件式开发更加合理和简单.笔者之前有写过一篇Vue2.0子父组件通信,这次我们就来聊一聊平级组件之间的通信. 首先我们先搭好开 ...
- Load generator连接失败的解决办法!(转)
环境:1.loadrunner control 一台物理机(win2008r2) 2.loadrunner agent 两台物理机(win2008r2) 问题:loadrunner control 连 ...