【解析】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. jmeter 参数化学习笔记

    上次写了在接口的交互过程中,系统返回的内容,需要在接下来的交互中用到,从而把参数进行参数化的关联,这次写一下在压测过程中,如果每次发起请求参数名相同,单参数值需要替换的,我们需要进行的参数化. 在使用 ...

  2. R 连接mysql数据库

    一.配置RODBC 1.R下载RODBC包,安装好.2.在http://dev.mysql.com/downloads/connector/odbc下载mySQL ODBC,安装好.3.windows ...

  3. set statistics profile on实例

    set statistics profile on实例 1.SQL语句实例   SQL 代码   复制 SET STATISTICS PROFILE ON GO SELECT COUNT(b.[Sal ...

  4. 错误 RC1015: 无法打开包含文件 'XTToolkitPro.rc'

    XtremeToolkitPro作为VC++/MFC平台下目前最流行的GUI界面库之一,安装和使用都很方便.不过,在实际使用中还是碰到许多问题.如果在编译工程时只显示一个错误:RC1015: 无法打开 ...

  5. 读白帽子web安全笔记

    点击劫持 frame buseting if (top.location != location) { top.location = self.location } html5的sandbox属性   ...

  6. monad - the Category hierachy

    reading the "The Typeclassopedia" by Brent Yorgey in Monad.Reader#13 ,and found that " ...

  7. 验证:java 主线程在子线程结束后才会结束

    package com.idealisan.test; /** * Hello world! * */ public class App { public static void main( Stri ...

  8. Java 8 集合不完全一览

    JDK 8 List 名称 线程安全 数据结构 允许 null 默认初始容量 扩容策略 备注 ArrayList 不安全 数组 允许 10 1.5 * old LinkedList 不安全 双链表 允 ...

  9. 51nod1079 中国剩余定理【数论】

    一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % 2 = 1, K % 3 = 2, K % 5 = 3.符合条件的最小的K = 23. Input 第1行:1个数N表 ...

  10. JavaSE 学习笔记之Java语法基础(二)

    1,关键字:其实就是某种语言赋予了特殊含义的单词. 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词. 2,标示符:其实就是在程序中自定义的名词.比如类名,变量名,函数名.包含 0-9. ...