题目背景

公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决。

题目描述

已知车上有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

算法提示:二分图的最大匹配

思路:网络流板子。

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 14010
using namespace std;
int n,m,ans;
int src,decc,tot=;
int lev[MAXN],cur[MAXN];
int to[MAXN*],cap[MAXN*],net[MAXN*],head[MAXN];
void add(int u,int v,int w){
to[++tot]=v;cap[tot]=w;net[tot]=head[u];head[u]=tot;
to[++tot]=u;cap[tot]=;net[tot]=head[v];head[v]=tot;
}
bool bfs(){
queue<int>que;
for(int i=src;i<=decc;i++){
lev[i]=-;
cur[i]=head[i];
}
que.push(src);lev[src]=;
while(!que.empty()){
int now=que.front();
que.pop();
for(int i=head[now];i;i=net[i])
if(lev[to[i]]==-&&cap[i]>){
que.push(to[i]);
lev[to[i]]=lev[now]+;
if(to[i]==decc) return true;
}
}
return false;
}
int dinic(int now,int flow){
if(now==decc) return flow;
int rest=,detal;
for(int & i=cur[now];i;i=net[i])
if(lev[to[i]]==lev[now]+&&cap[i]>){
detal=dinic(to[i],min(flow-rest,cap[i]));
if(detal){
rest+=detal;
cap[i]-=detal;
cap[i^]+=detal;
if(rest==flow) break;
}
}
if(rest!=flow) lev[now]=-;
return rest;
}
int main(){
scanf("%d",&n);
src=;decc=n*+;
for(int i=;i<=*n;i++){
int s1,s2;add(src,i,);
scanf("%d%d",&s1,&s2);
add(i,*n+s1,);add(i,*n+s2,);
}
for(int i=;i<=n;i++) add(*n+i,decc,);
while(bfs())
ans+=dinic(src,0x7f7f7f7f);
cout<<ans;
}

洛谷 P2071 座位安排 seat.cpp/c/pas的更多相关文章

  1. 洛谷——P2071 座位安排 seat.cpp/c/pas

    P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛, ...

  2. 【二分图】【最大匹配】【匈牙利算法】洛谷 P2071 座位安排 seat.cpp/c/pas

    ∵每个座位可以坐俩人,所以拆点最大匹配. #include<cstdio> #include<vector> #include<cstring> using nam ...

  3. 洛谷P2071 座位安排

    题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛,每排座位只能坐两人,且每个人都有自己想坐的排数,问最 ...

  4. 洛谷P1386座位安排

    座位安排 今天,在机房里做了这道题目,我来整理一下思路. 首先读懂题意,这n个人是不需要按1到n来一次安排的,也就是说你可以先安排任意一个人. 那么有一种很好排除的情况,那就是对于大于等于i的作为的需 ...

  5. [洛谷P2365] 任务安排

    洛谷题目链接:任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时 ...

  6. 洛谷P2365 任务安排(斜率优化dp)

    传送门 思路: 最朴素的dp式子很好考虑:设\(dp(i,j)\)表示前\(i\)个任务,共\(j\)批的最小代价. 那么转移方程就有: \[ dp(i,j)=min\{dp(k,j-1)+(sumT ...

  7. 洛谷 P1160 队列安排 Label:链表 数据结构

    题目描述 一个学校里老师要将班上N个同学排成一列,同学被编号为1-N,他采取如下的方法: 1.先将1号同学安排进队列,这时队列中只有他一个人: 2.2-N号同学依次入列,编号为i的同学入列方式为:老师 ...

  8. 洛谷 P1160 队列安排

    题目描述 一个学校里老师要将班上 NNN 个同学排成一列,同学被编号为 $1-N$ ,他采取如下的方法: 先将 111 号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N 号同学依次入列, ...

  9. 2018.07.09 洛谷P2365 任务安排(线性dp)

    P2365 任务安排 题目描述 N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间 ...

随机推荐

  1. WCF与各语言通信框架比较

  2. 使用 python 读写中文json

    读写中文json )   输出中文的json. 通过使用 ensure_ascii=False,输出原有的语言文字.indent參数是缩进数量. 更改写文件格式 将上一步导出的 string 直接写文 ...

  3. Web前端开发实战2:二级下拉式菜单之JS实现

    上一篇博文提到了二级下拉式菜单是用HTML和CSS实现的.我们这一篇来用JavaScript脚本实现下拉菜单的显 示和隐藏. 使用 JavaScript方法实现我们须要用的知识有: 1)JS事件:on ...

  4. HDU 1171 Big Event in HDU(多重背包)

    Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest depa ...

  5. 【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查

    (1)效果 (2)源码与资源下载 http://pan.baidu.com/s/1pJLo2PP (3)总结 --核心是利用UITableView里面自带的cell来制作样式同样的cell. 与之对应 ...

  6. qq邮箱的SMTP服务器是什么

    qq邮箱的SMTP服务器是什么 QQ邮箱POP3 和 SMTP 服务器地址设置如下:POP3服务器地址为“pop.qq.com”,SMTP服务器地址为“smtp.qq.com”注:1.SMTP服务器需 ...

  7. zzulioj--1638--Happy Thanksgiving Day - Say 3Q I(水题)

    1638: Happy Thanksgiving Day - Say 3Q I Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 91  Solved: ...

  8. 【NOI 2002】 银河英雄传说

    [题目链接] https://www.luogu.org/problemnew/show/P1196 [算法] 并查集 [代码] #include<bits/stdc++.h> using ...

  9. 在阿里云的iis上安装php扩展

    具体参照http://jingyan.baidu.com/article/11c17a2c5ce349f447e39d6d.html

  10. Python笔记(三)

    # -*- coding:utf-8 -*- # 运算符 a,b=10,20 # 算术运算符:包括+.-.*./.%.**.//运算 print "********************1 ...