建图方式:旧关系女人连男人,现关系男人连女人(当然,反过来也可以)

原因可以这样考虑:

如果一个男的把女的绿了,那么这个女人就会去找一个她曾经交往过的男人,也就是在这种情况下,某种“影响”会顺着旧关系从女人传到男人,而此时这个男人又会顺着原关系把这种“影响”传给另一个女人;如果这种“影响”传回了那个男人,就说明那个男人也成功配对,并且这种“影响”的传递路径上正向边和反向边的个数相同(即被打破的关系数和新建立的关系数相同),所以这个婚姻就不稳定。

所以建完图后可以跑Tarjan,如果一对夫妇在同一个SCC中,这个婚姻就不稳定。

#include <cstdio>
#include <iostream>
#include <map>
#include <string>
using namespace std;
map<string, int> M;
const int MAXN = 200000;
int cnt;
int head[MAXN], nxt[MAXN], to[MAXN];
int tot;
void ins(int u, int v)
{
nxt[++cnt] = head[u];
head[u] = cnt;
to[cnt] = v;
}
int dfn[MAXN], low[MAXN], clo[MAXN];
int vis[MAXN], sta[MAXN], top;
void tarjan(int u)
{
sta[++top] = u;
dfn[u] = low[u] = ++tot;
vis[u] = 1;
for (int i = head[u], v = to[i]; i; i = nxt[i], v = to[i])
if (!dfn[v])
{
tarjan(v);
low[u] = min(low[u], low[v]);
}
else if (vis[v])
low[u] = min(low[u], dfn[v]);
if (low[u] == dfn[u])
{
clo[u] = u;
vis[u] = 0;
int y;
while ((y = sta[top--]) != u)
clo[y] = u, vis[y] = 0;
}
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
int u, v;
string girl, boy;
cin >> n;
for (int i = 1; i <= n; ++i)
{
cin >> girl;
u = M[girl] = ++tot;
cin >> boy;
v = M[boy] = ++tot;
ins(u, v);
}
cin >> m;
tot = 0;
for (int i = 1; i <= m; ++i)
{
cin >> girl;
cin >> boy;
v = M[girl];
u = M[boy];
ins(u, v);
}
for (int i = 1; i <= (n << 1); ++i)
if (!dfn[i])
tarjan(i);
for (int i = 1; i <= n; ++i)
if (clo[i << 1] == clo[(i << 1) - 1])
cout << "Unsafe\n";
else
cout << "Safe\n";
return 0;
}

题解 P1407的更多相关文章

  1. 【题解】P1407国家集训队稳定婚姻

    [题解][P1407 国家集训队]稳定婚姻 很好的一道建模+图论题. 婚姻关系?很像二分图匹配呀,不过不管怎么办先建模再说.婚姻关系显然用图方面的知识解决.建图! 它给定的是字符串,所以我们使用\(a ...

  2. 题解【洛谷P1407】 [国家集训队]稳定婚姻

    题面 题解 很好的\(Tarjan\)练习题. 主要讲一下如何建图. 先用\(STL \ map\)把每个人的名字映射成数字. 输入第\(i\)对夫妻时把女性映射成\(i\),把男性映射成\(i+n\ ...

  3. 题解【luogu P2421 bzoj P1407 [NOI2002]荒岛野人】

    洛谷题目链接 bzoj题目链接 题目大意:给定\(n\)组\(C_i, P_i, L_i\),求最小的\(M\)使得对于任意的\(i,j (1 \leq i, j \leq n)\) \[C_i + ...

  4. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  5. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  6. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  7. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  8. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  9. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

随机推荐

  1. super,this关键字用法 Java

    super 用法 1.调用父类变量2.调用父类方法3.子类构造方法第一句 this 用法 super关键字用来访问父类内容, this 关键字用来访问本类中的内容, 有三种用法 1.在本类的成员方法中 ...

  2. 附002.Nginx全系列大总结

    Nginx全系列总结如下,后期不定期更新. 欢迎基于学习.交流目的的转载和分享,禁止任何商业盗用,同时希望能带上原文出处,尊重ITer的成果,也是尊重知识. 若发现任何错误或纰漏,留言反馈或右侧添加本 ...

  3. .net core 自带分布式事务的微服务开源框架JMS

    事务的统一性是微服务的一个重点问题,简洁有效的控制事务,更是程序员所需要的.JMS的诞生,就是为了更简单.更有效的控制事务. 先看一段调用微服务的代码: using (var ms = new JMS ...

  4. webserver 返回json 如何去掉 <string xmlns="http://tempuri.org/">

    [WebMethod]  public void GetJson(String sJson)  {    Context.Response.Charset = "UTF-8"; / ...

  5. 彻底解决ssh.invoke_shell() 返回的中文问题

    上一篇:https://www.cnblogs.com/apff/p/9484939.html(python如何实现普通用户登录服务器后切换到root用户再执行命令遇到的错误解决 ) 接上一篇,前两篇 ...

  6. 究竟什么时候该使用MQ?

    究竟什么时候该使用MQ? 原创: 58沈剑 架构师之路  昨天 任何脱离业务的组件引入都是耍流氓.引入一个组件,最先该解答的问题是,此组件解决什么问题. MQ,互联网技术体系中一个常见组件,究竟什么时 ...

  7. JavaScript基础内容

    javascript:是个脚本语言,需要有宿主文件,他的宿主文件是html文件.用来交互的 Javascript基础  写法分类: 1.内联(行内):写在标签里面,以事件属性表现 属性名就是事件属性名 ...

  8. 记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用

    记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用 目录 大文件无法push到远程仓库 问题 commit的大文件无法push到远程库解决办法 git filter ...

  9. PHP E-mail 注入

    PHP Secure E-mails 在上一节中的 PHP e-mail 脚本中,存在着一个漏洞. PHP E-mail 注入 首先,请看上一章中的 PHP 代码: <html> < ...

  10. PHP define() 函数

    实例 定义一个大小写敏感的常量: <?php define("GREETING","Hello you! How are you today?"); ec ...