【解析】Hash,离散化。Tarjan



[分析]

对于每一个名字。首先离散化成编号。

用hash或者其它,反正不要最主要的即可了。否则O(N^2L)会爆掉。

然后请參考:http://www.cnblogs.com/Randolph87/p/3757817.html



[吐槽]

难得吐槽一下,做这道题居然做了一个上午,開始暴力求标号,然后一直TLE。

中间map的数据范围少开了N,也试过几次WA。

这不是水题吗。为什么会是一个艰难的Accept...



[小结]

求二分图完备匹配的必要边,①存不存在增广环?

O(N^2) ②直接试着删去依照hungery找完备匹配 O(N^3)。

[代码]

#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std; typedef unsigned long long ULL;
const int N=8002;
const int M=20001;
const int L=12;
const int T=37;
const int LMT=100009; int n,m;
struct G
{
int v,nxt;
}map[M+N];
int tt,hd[N];
int dfn[N],pre[N],ct;
int edge[N][2];
int v[N],color[N],stk[N],cc;
char t[L];
struct T
{
char s[L];
int nxt;
}hash[N];
int num,hh[LMT]; inline void ins(int u,int v)
{
map[++tt].v=v;
map[tt].nxt=hd[u];
hd[u]=tt;
} void tarjan(int now)
{
dfn[now]=pre[now]=++ct;
stk[++stk[0]]=now,v[now]=1;
for (int k=hd[now];k;k=map[k].nxt)
{
if (v[map[k].v]==2) continue;
if (v[map[k].v]==1)
{
if (pre[map[k].v]<dfn[now]) dfn[now]=pre[map[k].v];
continue;
}
tarjan(map[k].v);
if (dfn[map[k].v]<dfn[now]) dfn[now]=dfn[map[k].v];
}
if (pre[now]==dfn[now])
{
cc++;
for (;stk[stk[0]]!=now;stk[0]--)
color[stk[stk[0]]]=cc,v[stk[stk[0]]]=2;
color[stk[stk[0]]]=cc; v[stk[stk[0]--]]=2;
}
} inline ULL h(void)
{
ULL sum=0; int lt=strlen(t);
for (int i=0;i<lt;i++) sum=sum*T+t[i]-'0';
return sum;
} int pos(void)
{
int key=h()%LMT;
for (int k=hh[key];k;k=hash[k].nxt)
if (!strcmp(hash[k].s,t)) return k;
memmove(hash[++num].s,t,sizeof t);
hash[num].nxt=hh[key];
return hh[key]=num;
} int main(void)
{
int t1,t2;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%s",t); t1=pos();
scanf("%s",t); t2=pos();
edge[i][0]=t1,edge[i][1]=t2;
ins(t1,t2);
}
scanf("%d",&m);
for (int i=1;i<=m;i++)
{
scanf("%s",t); t1=pos();
scanf("%s",t); t2=pos();
ins(t2,t1);
} for (int i=1;i<=n;i++)
if (!v[edge[i][0]]) tarjan(edge[i][0]); for (int i=1;i<=n;i++)
printf("%s\n",color[edge[i][0]]==color[edge[i][1]]?"Unsafe":"Safe"); return 0;
}

【BZOJ】2140 稳定婚姻的更多相关文章

  1. BZOJ 2140 稳定婚姻

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

  2. bzoj 2140: 稳定婚姻 (二分图)

    //========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/  转载要声明! //=============== ...

  3. BZOJ 2140 稳定婚姻 ——二分图

    论二分图的可行边与必须边. 考虑用dinic增广之后的图,一些是必要的割边,一些是可行的割边. 我们首先求出一组可行的最大匹配,那么这些变都是可行的. 然后我们求一遍强连通分量. 如果 scc[u]! ...

  4. 2140: 稳定婚姻 - BZOJ

    Description 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的姗姗和男友谈恋爱半年就 ...

  5. BZOJ2140: 稳定婚姻

    题解: 题意就是求二分图的必须边. 我们有结论: 在残量网络上跑tarjan,对于一条边(u,v) 如果该边满流||scc[u]==scc[v],那么该边是可行边. 因为如果scc[u]==scc[v ...

  6. BZOJ2140: 稳定婚姻(tarjan解决稳定婚姻问题)

    2140: 稳定婚姻 Time Limit: 2 Sec  Memory Limit: 259 MBSubmit: 1321  Solved: 652[Submit][Status][Discuss] ...

  7. [BZOJ3816][清华集训2014]矩阵变换(稳定婚姻问题)

    3816: 矩阵变换 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 803  Solved: 578[Submit][Status][Discuss] ...

  8. 【HDU1914 The Stable Marriage Problem】稳定婚姻问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1914 题目大意:问题大概是这样:有一个社团里有n个女生和n个男生,每位女生按照她的偏爱程度将男生排序, ...

  9. UVA 1175 Ladies' Choice 稳定婚姻问题

    题目链接: 题目 Ladies' Choice Time Limit: 6000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu 问题 ...

随机推荐

  1. C - Fafa and his Company

    Problem description Fafa owns a company that works on huge projects. There are n employees in Fafa's ...

  2. 自动换行 word-break:break-all和word-wrap:break-word

    1.word-break:break-all;当内容(比如很长的一个单词)到每行的末端时,它会把单词截断显示一部分,下一行显示后一部分. 2.word-wrap:break-word;当内容(比如很长 ...

  3. Android ViewPager使用方法小结

    android-support-v4.jar 是谷歌提供给我们的一个兼容低版本安卓设备的软件包,里面包囊了只有在 Android 3.0 以上可用的API.而 ViewPager 就是其中之一.利用它 ...

  4. redis 主从复制 redis 探索

    http://blog.csdn.net/column/details/12804.html

  5. 【技术累积】【点】【git】【10】.gitignore和.gitattributes

    .gitignore 告诉git忽略一些文件,git status会显示不到这些文件的状态. 一般放在项目根目录,以对全局控制,当然可以放在module下: 具体规则主要是: 以行为单位定义忽略文件类 ...

  6. PHP实现几秒前、几分钟前、几小时前、几天前

    /** * @Description: 将时间转换为几秒前.几分钟前.几小时前.几天前 * @Author: Yang * @param $the_time 需要转换的时间 * @return str ...

  7. 单链表每k个节点一组进行反转(最后不足k个也反转)

    一道面试题,第一次碰到这道题的时候 要求10分钟之内手写代码实现,当时没写出来,后来花点时间把过程梳理一遍,也挺简单的....... 思路就是在原来单链表反转的基础上,加几个控制参数,记录几个关键节点 ...

  8. Windows Server 2008 R2 搭建DNS服务器(转)

    Windows Server 2008 R2 搭建DNS服务器将本机IP设为首选DNS服务器的地址在dos 下分别输入 nslookup www.mydns.com 和 nslookup 192.16 ...

  9. Uoj #218. 【UNR #1】火车管理 可持久化线段树+思维

    Code: #include<bits/stdc++.h> #define maxn 500005 using namespace std; int n,Q,ty,lastans=0; i ...

  10. BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 网络流 + 二分 + Floyd

    Description FJ's cows really hate getting wet so much that the mere thought of getting caught in the ...