【解析】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. ACM_一道耗时间的水题

    一道耗时间的水题 Time Limit: 2000/1000ms (Java/Others) Problem Description: Do you know how to read the phon ...

  2. layui 时间前后节点验证

    var start = { istime: true, format: 'YYYY-MM-DD hh:mm:ss', max: '2099-06-16', istoday: true, choose: ...

  3. python--6、re模块

    re模块 用于在正则表达式匹配操作. python中为了避免实现输出'\','\n'字符的转义问题(如正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python ...

  4. 利用MediaSession发送信息到蓝牙音箱

    1.利用MediaSession发送信息到蓝牙音箱,如:播放音乐时接收的歌曲信息,但是每一首歌连续播放时,再次发送的重复信息会被丢弃.则利用MediaSession发现信息时,要保证信息的不重复性. ...

  5. Reducing the Dimensionality of Data with Neural Networks:神经网络用于降维

    原文链接:http://www.ncbi.nlm.nih.gov/pubmed/16873662/ G. E. Hinton* and R. R. Salakhutdinov .   Science. ...

  6. Architecture:话说科学家/工程师/设计师/商人

    从使命.目的.行为的不同,可以归类人群到科学家.工程师.设计师.商人等等.使命分别是:1.携带当下社会的财富对未来探索,希望引发变革:2.掌握工程全貌.完成整个工程的圣经周期:3.在工程的设计层面做文 ...

  7. AS3.0+PHP写入mySQL

    php中$_POST变量是一个数组,用于收集来自method="post"的值,内容是有HTTP POST方法发送的变量名称和值. 从带有POST方法的表单发送的信息,对任何人都是 ...

  8. react构建前端项目方法汇总

    react简介: 一.使用react 创建一个PC端的项目 (a):使用 yemon 创建一个 webpack 的 react 的项目 控制台安装并且产看 yemon 的版本 yo -v (b): 全 ...

  9. 用Python获取摄像头并实时控制人脸

    实现流程从摄像头获取视频流,并转换为一帧一帧的图像,然后将图像信息传递给opencv这个工具库处理,返回灰度图像(就像你使用本地静态图片一样) 程序启动后,根据监听器信息,使用一个while循环,不断 ...

  10. 记Python学习

    上周学的Python,感觉有点忘了,现在回顾一下... 一.Python安装及测试:https://www.cnblogs.com/weven/p/7252917.html 例子: Python自带的 ...