洛谷P2071 座位安排
2018-02-17 10:29
127 查看
题目背景
公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决。题目描述
已知车上有N排座位,有N*2个人参加省赛,每排座位只能坐两人,且每个人都有自己想坐的排数,问最多使多少人坐到自己想坐的位置。输入输出格式
输入格式:第一行,一个正整数N。第二行至第N*2+1行,每行两个正整数Si1,Si2,为每个人想坐的排数。输出格式:
一个非负整数,为最多使得多少人满意。
输入输出样例
输入样例#1:4 1 2 1 3 1 2 1 3 1 3 2 4 1 3 2 3输出样例#1:
7
说明
对于10%的数据 N≤10对于30%的数据 N≤50对于60%的数据 N≤200对于100%的数据 N≤2000算法提示:二分图的最大匹配题目都说的那么明白了,于是:匈牙利大法好。。。注:我不知道是什么玄学原因,我的 dinic 炸了,于是。。。附代码:#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define MAXN 4010
using namespace std;
int n,ans=0,c=1,head[MAXN],f[MAXN];
bool vis[MAXN];
struct node{
int next,to;
}a[MAXN<<2];
inline int read(){
int date=0,w=1;char c=0;
while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
return date*w;
}
inline void add(int x,int y){
a[c].to=y;
a[c].next=head[x];
head[x]=c++;
}
bool find(int x){
for(int i=head[x];i;i=a[i
e2f0
].next){
int v=a[i].to;
if(!vis[v]){
vis[v]=true;
if(f[v]==-1||find(f[v])){
f[v]=x;
return true;
}
}
}
return false;
}
int main(){
n=read()<<1;
memset(f,-1,sizeof(f));
memset(a,false,sizeof(a));
for(int i=1;i<=n;i++){
int x=read()<<1,y=read()<<1;
add(i,x-1);add(i,x);
add(i,y-1);add(i,y);
}
for(int i=1;i<=n;i++){
memset(vis,false,sizeof(vis));
if(find(i))ans++;
}
printf("%d\n",ans);
return 0;
}
相关文章推荐
- HDU 4532 湫秋系列故事——安排座位(组合DP)
- 组合dp hud-4532-湫秋系列故事——安排座位
- 湫秋系列故事——安排座位
- vijos1286座位安排(状压dp加组合数加gcd)
- csuoj1971 安排座位
- HDU - 4532 湫秋系列故事――安排座位
- 【二分图】【最大匹配】【匈牙利算法】洛谷 P2071 座位安排 seat.cpp/c/pas
- HDU - 4532 湫秋系列故事――安排座位 (组合数dp)
- “有道难题——编程挑战赛”,如何为实习生安排座位
- HDU 4532 湫秋系列故事——安排座位(组合)
- hdu 4532 湫秋系列故事——安排座位
- AOJ614 座位安排
- vijosP1286座位安排(状压dp)
- 腾讯笔试——安排座位(动态规划)
- 去哪儿笔试:座位安排问题
- 从培训场地的座位安排说起
- 大型宴席如何安排座位?SocialTables帮你轻松搞定
- [2013腾讯马拉松复赛第一场]HDU 4532 湫秋系列故事——安排座位
- vijos - P1286座位安排 (DP状态压缩 + 组合数 + python)
- [组合数 DP] HDU 4532 湫秋系列故事——安排座位