【bzoj2140】: 稳定婚姻 图论-tarjan

【bzoj2140】: 稳定婚姻

哎。。都是模板题。。

一眼看过去 哇 二分图哎

然后发现好像并不能匈牙利算法

自己xjb画两张图,发现二分图左向右连配偶的边,然后右向左连交往过的边

然后如果Bi Gi在同一个强连通分量里面就一定可以在Bi Gi离婚以后再增广一次

最开始用map维护一下名字就好了

 1 /* http://www.cnblogs.com/karl07/ */
 2 #include <cstdlib>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <algorithm>
 7 #include <stack>
 8 #include <map>
 9 #include <string>
10 using namespace std;
11
12 const int N=100005;
13 struct edge{
14     int next,to;
15 }e[N*4];
16 int n,m,ade,cnt,cq;
17 int first[N],low[N],dfn[N],vis[N],ins[N],pos[N];
18 stack <int> S;
19 map <string,int> mp;
20
21 void addedge(int x,int y){
22     e[++ade].to=y;
23     e[ade].next=first[x];
24     first[x]=ade;
25 }
26
27 #define s e[x].to
28 void dfs(int p){
29     dfn[p]=low[p]=++cnt;
30     ins[p]=vis[p]=1;
31     S.push(p);
32     for (int x=first[p];x;x=e[x].next){
33         if (!vis[s]){
34             dfs(s);
35             if (ins[s]) low[p]=min(low[p],low[s]);
36         }else{
37             if (ins[s]) low[p]=min(low[p],dfn[s]);
38         }
39     }
40     if (low[p]==dfn[p]){
41         cq++;
42         while (S.top()!=p){
43             pos[S.top()]=cq;
44             ins[S.top()]=0;
45             S.pop();
46         }
47         pos[S.top()]=cq;
48         ins[S.top()]=0;
49         S.pop();
50     }
51 }
52
53 int main(){
54     scanf("%d",&n);
55     for (int i=1;i<=n;i++){
56         char a[20],b[20];
57         scanf("%s%s",a,b);
58         mp[a]=i,mp[b]=i+n;
59         addedge(i,i+n);
60     }
61     scanf("%d",&m);
62     for (int i=1;i<=m;i++){
63         char a[20],b[20];
64         scanf("%s%s",a,b);
65         addedge(mp[b],mp[a]);
66     }
67     for (int i=1;i<=n*2;i++) if (!vis[i]) dfs(i);
68     for (int i=1;i<=n;i++){
69         if (pos[i]==pos[i+n]) puts("Unsafe"); else puts("Safe");
70     }
71     return 0;
72 }
73  

时间: 2024-08-26 02:38:58

【bzoj2140】: 稳定婚姻 图论-tarjan的相关文章

BZOJ2140: 稳定婚姻

题解: 题意就是求二分图的必须边. 我们有结论: 在残量网络上跑tarjan,对于一条边(u,v) 如果该边满流||scc[u]==scc[v],那么该边是可行边. 因为如果scc[u]==scc[v],那么说明v到u有通路,我们把v-u的路以及u-v这条边全部反色,也就是匹配->非匹配,非匹配->匹配.同样还是最大匹配.这说明该边是可行的. 如果该边满流&&scc[u]!=scc[v],那么该边是必须边. 因为如果去掉这条边,最大匹配会减少1(想想看),所以该边必须出现在最大

稳定婚姻(tarjan)

传送门 这道题一开始可能以为是二分图匹配--?不过后来发现和二分图没啥大关系. 简单分析之后发现,把夫妻之间连边(男性向女性连边),之后再将每对曾经是情侣的人连边(女性向男性连边),当然以上的方向可以反过来不过两次连接方向必须相反.这样的话如果婚姻是危险的那么这些就是在一个强连通分量里面的.换句话说,如果一个强连通分量中有多于1个点,那么就说明这个婚姻并不稳定(夫妻之间连单向边,所以如果婚姻稳定的话夫妻不会出现在一个强连通分量之中) 这样的话就比较好办了,直接如上述方法见图之后跑tarjan求出

luogu P1407 稳定婚姻-tarjan缩点

题目背景 原<工资>重题请做2397 题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的姗姗和男友谈恋爱半年就结婚,结婚不到两个月就离婚,是典型的“闪婚闪离”例子,而离婚的导火线是两个人争玩电脑游戏,丈夫一气之下,把电脑炸烂. 有社会工作者就表示,80后求助个案越来越多,有些是与父母过多干预有关.而根据民政部的统计,中国离婚五大城市首位是北京,其次是上海.深圳,广州和厦门,那么到底

稳定婚姻问题和Gale-Shapley算法(转)

什么是算法?每当有人问作者这样的问题时,他总会引用这个例子:假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚.如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在每个女孩儿心中的排名,你应该怎样为他们牵线配对呢? 最好的配对方案当然是,每个人的另一半正好都是自己的“第一选择”.这虽然很完美,但绝大多数情况下都不可能实现.比方说,男1号最喜欢的是女1号,而女1号的最爱不是男1号,这两个人的最佳选择就不可能被同时满足.如果好几个男孩儿最喜欢的都是同一个女孩儿,这

uva 1175 Ladies&#39; Choice (稳定婚姻问题)

uva 1175 Ladies' Choice Background Teenagers from the local high school have asked you to help them with the organization of next year?s Prom. The idea is to find a suitable date for everyone in the class in a fair and civilized way. So, they have or

HDU 3207 Ikki&#39;s Story IV - Panda&#39;s Trick(图论-2SAT,图论-tarjan)

Ikki's Story IV - Panda's Trick Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 7821   Accepted: 2892 Description liympanda, one of Ikki's friend, likes playing games with Ikki. Today after minesweeping with Ikki and winning so many tim

(算法)稳定婚姻匹配

题目: 婚介所登记了N位男孩和N位女孩,每个男孩都对N个女孩的喜欢程度做了排序,每个女孩都对N个男孩的喜欢程度做了排序,你作为月老,能否给出稳定的牵手方案? 稳定的定义:如果男孩i和女孩a牵手,但男孩i对女孩b更喜欢,而女孩b的男朋友j拼不过男孩i,则没有力量阻碍男孩i和女孩b的私奔,这即是不稳定的. 思路: 1962 年,美国数学家 David Gale 和 Lloyd Shapley 发明了一种寻找稳定婚姻的策略.不管男女各有多少人,不管他们各自的偏好如何,应用这种策略后总能得到一个稳定的婚

nyoj 月老的难题 (稳定婚姻问题)

百度了一下稳定婚姻问题.. 还有什么GS算法.. 以为什么高端的东西.. 尼玛结果代码跟上一题一模一样的好吗.. 醉了.. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<string> 6 #include<queue> 7 #include<algorithm> 8 #include&l

POJ 3352 Road Construction(图论-tarjan)

Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8647   Accepted: 4318 Description It's almost summer time, and that means that it's almost summer construction time! This year, the good people who are in charge of the ro