博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【luogu P2071 座位安排】 题解
阅读量:5141 次
发布时间:2019-06-13

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

题目链接:

邻接表 + 匈牙利

把之前的邻接矩阵匈牙利变成邻接表

要不然存不下...

code:

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 inline int read() 7 { 8 int ret=0; 9 char c=getchar();10 while (c<'0' || c>'9') c=getchar();11 while (c>='0' && c<='9'){12 ret=((ret<<3)+(ret<<1))+c-'0';13 c=getchar();14 }15 return ret;16 }17 const int maxn = 4010;18 int n, ans, cnt;19 int link[maxn], head[maxn];20 bool vis[maxn];21 struct edge{22 int v,next;23 }e[maxn<<2];24 void add(int u, int v)25 {26 e[++cnt].v = v;27 e[cnt].next = head[u];28 head[u] = cnt;29 }30 bool dfs(int u)31 {32 int v = head[u];33 for(int i = v; i != 0; i = e[i].next)34 {35 if(!vis[e[i].v])36 {37 vis[e[i].v] = 1;38 if(!link[e[i].v] || dfs(link[e[i].v])) 39 {40 link[e[i].v] = u;41 return 1;42 }43 } 44 }45 return 0;46 }47 int main()48 {49 int u,v;50 n = read();51 for(int i = 1; i <= n*2; i++)52 {53 u = read(); v = read();54 add(i,u);55 add(i,u+n);56 add(i,v);57 add(i,v+n);58 }59 for(int i = 1; i <= n*2; i++)60 {61 memset(vis,0,sizeof(vis));62 if(dfs(i)) ans++;63 }64 printf("%d",ans);65 return 0; 66 }

 

转载于:https://www.cnblogs.com/MisakaAzusa/p/8858260.html

你可能感兴趣的文章
解决ajax请求cors跨域问题
查看>>
《收获,不止Oracle》pdf
查看>>
LinkedList<E>源码分析
查看>>
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Activity之间的跳转:
查看>>
实验四2
查看>>
Android现学现用第十一天
查看>>
多路复用
查看>>
Python数据可视化之Pygal(雷达图)
查看>>
Java学习笔记--字符串和文件IO
查看>>
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>
sublime3
查看>>
Exception Type: IntegrityError 数据完整性错误
查看>>
Nuget:Newtonsoft.Json
查看>>
【luogu4185】 [USACO18JAN]MooTube [并查集]
查看>>
手机号脱敏处理
查看>>
CI控制器调用内部方法并载入相应模板的做法
查看>>