正题

题目链接:https://www.luogu.org/problemnew/show/P1407


题目大意

若干对夫妻,和若干对绿色关系,求每对夫妻离婚后,绿色关系是否可以重新让每个人两两配对。


解题思路

我们可以让
夫妻女的连男的
交往男的连女的

然后跑tarjantarjantarjan,若一对夫妻在同一个联通分量里,那么一点有办法使得男的可以到女的,而这条路径一定是偶数个点,只要让这条路径两两配对就可以重新构成关系。


codecodecode

#include<cstdio>
#include<string>
#include<algorithm>
#include<iostream>
#include<map>
#include<stack>
using namespace std;
const int N=9000,M=70000;
struct edge{int to,next;
}a[M];
map<string,int> num;
stack<int> s;
int tot,h,l[N],dfn[N],n,lt,inlt[N];
int low[N],ls[N],cnt;
bool v[N];
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void tarjan(int x)
{dfn[x]=low[x]=++cnt;s.push(x);v[x]=1;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);}else if(v[y])low[x]=min(low[x],dfn[y]);}if(low[x]==dfn[x]){++lt;s.push(1);do{s.pop();inlt[s.top()]=lt;v[s.top()]=0;}while(s.top()!=x);s.pop();}
}
int main()
{tot=1;scanf("%d",&h);for(int i=1;i<=h;i++){string a,b;cin>>a>>b;num[a]=++n;num[b]=++n;addl(n-1,n);}scanf("%d",&h);for(int i=1;i<=h;i++){string a,b;cin>>a>>b;addl(num[b],num[a]);}for(int i=1;i<=n;i++)if(!dfn[i]) tarjan(i);for(int i=1;i<=n;i+=2)if(inlt[i]!=inlt[i+1]) printf("Safe\n");else printf("Unsafe\n");
}

P1407-[国家集训队]稳定婚姻【tarjan,强连通分量】相关推荐

  1. P1407 [国家集训队]稳定婚姻

    [国家集训队]稳定婚姻 - 洛谷https://www.luogu.com.cn/problem/P1407典型的二分图匹配问题,但这道题要先把正式夫妻先配对起来,先女后男,所以把男的都匹配上他们的老 ...

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

    题目大意:有$n$对夫妻和$m$对情人,如果一对情人中的两人都离婚了,那么他们可以结为夫妻.对于每一对夫妻,若他们离婚后所有人依然可以结婚,那么就是不安全的,否则是安全的.问每一对夫妻是否安全. 题解 ...

  3. Luogu P1407 [国家集训队]稳定婚姻 (二分图写法)

    RT,这是一道强联通分量. 而我一个热爱匈牙利的OIer 默默敲下了... #include<cstdio> #include<iostream> #include<cs ...

  4. YBTOJ洛谷P1407:稳定婚姻(强连通分量)

    文章目录 题目描述 解析 代码 题目描述 我们已知n对夫妻的婚姻状况,称第 i 对夫妻的男方为 Bi ,女方为 Gi. 若某男 Bi 与某女 Gi 曾经交往过( i!=j ),则当某方与其配偶(即 B ...

  5. 【tarjan强连通分量】洛谷P1726 上白泽慧音

    [tarjan强连通分量]洛谷P1726 上白泽慧音 题目传送门 妥妥的强连通模板啊(详细解释戳这里) #include <bits/stdc++.h> #define MAXN 5005 ...

  6. 2021.8.9【提高B组模拟1】T2 QYQ在艾泽拉斯(Tarjan强连通分量)(并查集)

    QYQ在艾泽拉斯 题目大意 输入样例 3 2 1 2 3 1 1 2 1 0 输出样例 4 样例说明: QYQ从3号点开始,走到2号点,最后走到1号点,结束旅程,共获得1+2+1=4价值的宝物 题目数 ...

  7. 【BZOJ2140】稳定婚姻 Tarjan

    [BZOJ2140]稳定婚姻 Description 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. ...

  8. BZOJ 2140: 稳定婚姻 tarjan

    2140: 稳定婚姻 Time Limit: 2 Sec  Memory Limit: 259 MB Submit: 764  Solved: 355 [Submit][Status][Discuss ...

  9. Tarjan 强连通分量

    强连通分量 图中找到一个最大的子图,使得子图中任意两个节点相互到达. 一个点也是一个强连通分量 Tarjan 构成强连通分量是必定是dfs树的一棵子树,在对树进行dfs的时候记录访问时间dfn和以该节 ...

  10. Strongly connected HDU - 4635(tarjan+强连通分量)

    题意: 给一个简单有向图,让你加最多的边,使他还是一个简单有向图. 题目: Give a simple directed graph with N nodes and M edges. Please ...

最新文章

  1. mpvue 微信小程序api_第三方框架与原生微信小程序开发框架性能之比较 | Q荐读...
  2. bzoj2751[HAOI2012]容易题(easy)
  3. 数组元素前移后移 RUNOOB python练习题 68
  4. java实现抽奖游戏_Java实现游戏抽奖算法
  5. AOP就是面向切面编程,我们可以从几个层面来实现AOP。 ![](https://upload-im
  6. 深度学习笔记_搭建一个简单网络(完整版)_手写数字识别MNIST
  7. MYSQL连接出现Auth_连接MySQL数据库出现时Authentication plugin 'caching_sha2_password' cannot be loaded的解决办法...
  8. scanf()接受不同类型的参数的一个例子
  9. Visio图片复制到word中显示不完全(毕业论文格式下)
  10. KVM虚拟化教程(超详细)
  11. C语言如何设置随机数
  12. 跨境电商独立站,如何找到更多联盟流量资源
  13. word中多级列表编号错乱怎么办?
  14. 申请百度语音识别API 接口-免费
  15. CAD批量打图精灵自动识别纸张大小
  16. uvaLive 4490 Help Bubu 帮助布布 等价转化+DP
  17. Finished with error: ProcessException: ProcessXXXXXXXexited abnormally 的解决方法
  18. 正则表达式叠字,过滤重复字
  19. ymlm启用root用户
  20. Element el-select 选择器(下拉框)详解

热门文章

  1. php 画图 坐标,说说PHP作图(一)_php
  2. java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...
  3. python 画树 递归_python递归函数绘制分形树的方法
  4. spss22.0统计分析从入门到精通_数据分析最全资料:SPSS/MATLAB/SQL/SAS/EXCEL经典教材+视频教程,快速入门!...
  5. 云南河道 kml文件_处理能力提升 4 倍 ,大疆智图 4 天完成 5 公里河道建模
  6. android loading封装_我们经常用的Loading动画居然还有这种姿势
  7. java char short区别_java 彻底理解 byte char short int float long double
  8. leetcode232. 用栈实现队列
  9. matlab常用函数辨析
  10. [JavaWeb-HTML]HTML标签_块标签