博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2140 稳定婚姻
阅读量:6238 次
发布时间:2019-06-22

本文共 1222 字,大约阅读时间需要 4 分钟。

题目链接:

题意:已知n对夫妻的婚姻状况,称第i对夫 妻的男方为Bi,女方为Gi。若某男Bi与某女Gj曾经交往过,则当某方与其配偶(即Bi与Gi或Bj与Gj)感情出现问题时,Bi与Gj有私奔的可能 性。不妨设Bi和其配偶Gi感情不和,于是Bi和Gj旧情复燃,进而Bj因被戴绿帽而感到不爽,联系上了他的初恋情人Gk……一串串的离婚事件像多米诺骨 牌一般接踵而至。若在Bi和Gi离婚的前提下,这2n个人最终依然能够结合成n对情侣,那么我们称婚姻i为不安全的,否则婚姻i就是安全的。给定所需信 息,你的任务是判断每对婚姻是否安全。

思路:将没对夫妻看做一个点,交往过的两个点两边。求强连通分量,强连通分量中的个数大于1则是不安全的

 

map
mp1,mp2;vector
g[N];int n,m;int low[N],dfn[N],id,color[N],size[N],num;stack
S;int visit[N];void DFS(int u){ dfn[u]=low[u]=++id; S.push(u); int i,v; FOR0(i,SZ(g[u])) { v=g[u][i]; if(!dfn[v]) DFS(v),upMin(low[u],low[v]); else if(!visit[v]) upMin(low[u],dfn[v]); } if(low[u]==dfn[u]) { num++; do { v=S.top(); S.pop(); visit[v]=1; color[v]=num; size[num]++; }while(u!=v); }}int main(){ RD(n); string S; int i; FOR1(i,n) { RD(S); mp1[S]=i; RD(S); mp2[S]=i; } RD(m); int x,y; FOR1(i,m) { RD(S); x=mp1[S]; RD(S); y=mp2[S]; g[x].pb(y); } FOR1(i,n) if(!visit[i]) DFS(i); FOR1(i,n) { if(size[color[i]]==1) puts("Safe"); else puts("Unsafe"); }}

 

 

 

转载地址:http://tbdia.baihongyu.com/

你可能感兴趣的文章
We Know What @You #Tag: Does the Dual Role Affect Hashtag Adoption-20160520
查看>>
(转)Eclipse新增安卓虚拟机
查看>>
SpringMvc访问Controller去掉do
查看>>
PHPnow升级PHP 5.4与Mysql 5.5
查看>>
正则表达式验证邮箱格式
查看>>
如何围绕企业战略,建设BI驾驶舱?
查看>>
java多线程stop,suspend使用代码实际例子
查看>>
中小型研发团队架构实践三:微服务架构(MSA)
查看>>
Windows动态库学习心得
查看>>
在VMware虚拟机上安装Ubuntu 10.04
查看>>
LDA主题模型简介
查看>>
可拖动的DIV续
查看>>
关于“类型初始值设定项引发异常”
查看>>
MySql 小表驱动大表
查看>>
Redis 数据结构的底层实现 (一) RealObject,embstr,sds,ziplist,quicklist
查看>>
SQL语句注入的问题
查看>>
jQueryEasyUI Messager基本使用
查看>>
【C语言学习趣事】_33_关于C语言和C++语言中的取余数(求模)的计算_有符号和无符号数的相互转换问题...
查看>>
Tensorboard教程:显示计算图中节点信息
查看>>
java 线程基本概念 可见性 同步
查看>>