洛谷P2071座位安排

思路:

网络流难在建图上面。
这题(应该也可以,我没尝试过)用二分图匹配去跑。可以拆点,将一排的座位拆成两个点,一个iii,一个i+ni+ni+n,然后匈牙利算法跑。
也可以用网络流跑最大流,将SSS向每个人iii连一条流量为111的边,再将每个人向他想坐的位置连一条流量为111的边,至于每排座位可以坐两个人,可以将每排座位向TTT连一条流量为222的边,这样就可以让他的最大流量是222了。

代码:

#include<bits/stdc++.h>
#define pii pair<int,int>
#define int long long
#define cl(x,y) memset(x,y,sizeof(x))
#define ct cerr<<"Time elapsed:"<<1.0*clock()/CLOCKS_PER_SEC<<"s.\n";
const int N=5e5+210;
const int mod=1e9+7;
const int maxn=0x3f3f3f3f;
const int minn=0xc0c0c0c0;
const int inf=99999999;
using namespace std;
struct edge
{int u,v,w;
}maze[N<<1];
int len=1,head[N]={0};
int dep[N];//深度
void add(int u,int v,int w)
{maze[++len]={head[u],v,w};head[u]=len;
}
int dfs(int u,int f,int t)
{int ans=0,i;if(u==t)return f;for(i=head[u];i && f;i=maze[i].u){int v=maze[i].v,w=maze[i].w;if(dep[v]==dep[u]+1 && w)//符合深度关系且能流 {int sum=dfs(v,min(f,w),t);maze[i].w-=sum;maze[i^1].w+=sum;f-=sum;ans+=sum;}  }if(!ans)dep[u]=-2;return ans;
}
int bfs(int s,int t)
{queue<int> q;cl(dep,0);dep[s]=1;//源点深度为1q.push(s);while(!q.empty()){int u=q.front(),i;q.pop();for(i=head[u];i;i=maze[i].u){int v=maze[i].v,w=maze[i].w;if(w && !dep[v])//有深度且能流 {dep[v]=dep[u]+1;q.push(v); }}}return dep[t];
}
int dinic(int s,int t)
{int ans=0;while(bfs(s,t))ans+=dfs(s,maxn,t);return ans;
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,i;cin>>n;int s=0,t=3*n+1;for(i=1;i<=2*n;i++){int x,y;cin>>x>>y;add(s,i,1);add(i,s,0);add(i,x+2*n,1);add(x+2*n,i,0);add(i,y+2*n,1);add(y+2*n,i,0);}for(i=1;i<=n;i++){add(i+2*n,t,2);add(t,i+2*n,0);}cout<<dinic(s,t)<<endl;return 0;
}

(二分图)洛谷P2071座位安排相关推荐

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

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

  2. 洛谷 P2071 座位安排 (最大流 + 建图)

    2020.7.15 今天先开个小差,这图书馆接近零下的气温给爷冻傻了,这还咋写题?马上回去了,练一练网络和tarjan吧. 这道题很简单,问有2n个人,n排座位,每个人都有喜欢的两个座位,最多能安置多 ...

  3. 洛谷P2071 座位安排

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

  4. 洛谷P1386座位安排

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

  5. P2071 座位安排(二分图最大匹配)

    P2071 座位安排(二分图最大匹配) 照着模板的套路,只不过座位是可以匹配两个人的,所以开个二维数组即可. 匈牙利常见的优化,vis数组能用bool就用bool,貌似用bitset更快?,建图的话单 ...

  6. P2071 座位安排

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

  7. 洛谷P1160 队列安排 链表

    洛谷P1160 队列安排   链表 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #i ...

  8. 二分图——洛谷P1155 双栈排序

    https://daniu.luogu.org/problem/show?pid=1155 二分图染色+模拟 1.首先考虑一个简单情况--单栈排序,显然有这样的一个事实: a[i]和a[j] 不能压入 ...

  9. 洛谷-P1160 队列安排

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

最新文章

  1. 清华魏少军:大部分AI芯片创业者将成为这场变革中的先烈
  2. c语言文件可用代码存放,C语言 文件(示例代码)
  3. 第12天续,CSS基础
  4. android studio编译提示错误:android Error:(21, 19) 错误: 程序包R不存在
  5. 关于SQL Server
  6. 内建函数对象(STL)
  7. 科技谋定功能性农业-农业大健康:中科微研携手从玉农业
  8. MFC中CString转换成char数组的问题
  9. JavaScript开发区块链只需200行代码 1
  10. Python判断素数(质数)
  11. 大型粒子对撞机已被上面叫停了!何祚庥:希望杨振宁李政道有生之年重归于好...
  12. HTML+css中鼠标经过触发等问题
  13. n维空间的欧氏距离公式_n维欧氏空间中球的体积公式与表面积公式之间的微分关系(论文资料).pdf...
  14. HowTo——cotex-m3处理器HardFault事后分析方法
  15. 在64位的Linux系统使用gcc的-m32选项编译32位的程序得到了多余的代码(多余指令call和add)、有多余的.text.__x86.get_pc_thunk.ax
  16. 从零实现Transformer、ChatGLM-6B、本地知识库、模型(训练/推理)加速
  17. Apache Griffin+Flink+Kafka实现流式数据质量监控实战
  18. oracle数据库之统计分析(方差、标准差、协方差)
  19. 计算机作品大赛成功举行,我系学生在2018年四川省大学生计算机作品赛中荣获一等奖...
  20. mipcms栏目分类调用

热门文章

  1. Arista 交换机升级手册
  2. 【教程】怎样在PC查看动漫之家(DMZJ)不能观看漫画
  3. LeetCode每日一题——1758. 生成交替二进制字符串的最少操作数
  4. 中科大计算机学院吴雨霏,刘敏 女 博导 计算技术研究所
  5. css3 烟 蚊香_如何使用纯CSS实现蚊香燃烧的效果(附源码)
  6. python在煤矿的用途-矿用非金属制品检测前处理方法研究
  7. 减肥期间早餐或者晚餐吃馒头包子可以吗?
  8. 2022最新魔方财务管理系统织音①号模板免费下载,智简魔方免费主题模板下载
  9. 5000元起家,40年4万倍!一个来自贫民窟的亿万富翁
  10. IEEE 802.15.4 CSMA-CA算法翻译(IEEE 802.15.4-2006 7.5.1.4 CSMA-CA algorithm)