洛谷P2071 座位安排 (二分图匹配) HQG

编程入门 行业动态 更新时间:2024-10-10 13:14:59

洛谷P2071 <a href=https://www.elefans.com/category/jswz/34/1768033.html style=座位安排 (二分图匹配) HQG"/>

洛谷P2071 座位安排 (二分图匹配) HQG

传送门

算法:二分图匹配(很明显的)

思路:把每一排的两个位置拆开(及成为了2*N排位置),把i可选的a和b建成4条边。

之后2N个人去匹配2N个作为(这就是很裸的二分图匹配了),在这里就不说了。(不会的点着)

CODE:

#include <bits/stdc++.h>
using namespace std;
const int N = 4000 + 10 ;
struct node{int v,next ;
}e[10*N];
int use[N],head[N],result[N] ;
int n,m,a,b,t,tot,ans=0 ;
void add_edge(int a,int b){e[tot].v=b ;e[tot].next=head[a] ;head[a]=tot++ ;
}
bool dfs(int now){for (int i=head[now];i;i=e[i].next) {int to=e[i].v ;if (use[to]!=t){ use[to]=t ;if (!result[to] || dfs(result[to])){ //没有匹配过 或 匹配者可以调配 result[to]=now ;return true ; } } }return false ;
}
void hungarian() {for (int i=1;i<=n;i++){t=i ;if (dfs(i)) ans++ ;}printf("%d\n",ans) ;return ;
}
int main(){scanf("%d",&n) ;for (int i=1;i<=2*n;i++) {scanf("%d %d",&a,&b) ;add_edge(i,a) ;add_edge(i,a+n) ;add_edge(i,b) ;add_edge(i,b+n) ;}n*=2 ;hungarian() ;return 0 ; 
}

更多推荐

洛谷P2071 座位安排 (二分图匹配) HQG

本文发布于:2024-03-23 23:01:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1743876.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:座位   洛谷   HQG

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!